Является ли g++ компилятором С++ и компоновщиком?
Я смотрел вывод моей сборки в Eclipse. Я перекрестно компилирую для процессора ColdFire. Линия компиляции выглядит так:
m68k-elf-g++ -O2 -falign-functions=4 -IC:\nburn\include -IC:\nburn\MOD52...
за которым следует еще файл include, очевидные флаги "компилятора" и, наконец, один исходный файл, который я изменил. Следующая строка снова вызывает тот же инструмент:
m68k-elf-g++ src\main.o src\TouchPanelMediator.o src\Startup.o....
Далее следует файл .o, в котором хранятся некоторые .ld файлы и некоторые .a файлы. Это, как представляется, связывает все типы файлов объектов вместе.
В семействе Gnu есть g++ какое-нибудь uber-приложение, которое может определять на основе аргументов, нужно ли его компилировать или связывать? У него есть как встроенные возможности, так и просто отправка компиляции в gcc и привязка к ld, и мой журнал просто не показывает это?
Ответы
Ответ 1
g++
и gcc
являются драйверами. Обычно они запускают препроцессор (cpp
), собственно компилятор (cc1plus
для С++ и cc1
для C) и компоновщик (золото или GNU ld) и все другие необходимые вещи. Разница между gcc
и g++
заключается в том, что последняя включает в себя одну дополнительную библиотеку для привязки к (libstdc++
).
В зависимости от того, к какому типу файлов они вызывают, они могут опустить некоторые шаги или сделать что-то по-другому. Для файлов .o
, например, нет необходимости запускать собственный компилятор или препроцессор.
Если вы передадите им -###
, вы увидите, что он печатает инструменты, которые он вызывает на каждом этапе его выполнения.
Ответ 2
Взято из этот маленький справочник GCC:
Основываясь на расширении файла, которое вы дали своей программе, он выбирает соответствующие команды, которые ему нужно выполнить, чтобы включить источник, который вы дали ему, в указанный вами выходной файл.
С красивой маленькой блок-схемой того, что GCC точно делает, в зависимости от расширений файла:
input extensions runs if output
![GCC run flow]()
Ответ 3
Он отправляет ссылку на ld.
Также см. здесь:
Как получить команду компоновщика GCC?