Является ли g ++ компилятором c ++ и компоновщиком? - PullRequest
18 голосов
/ 22 апреля 2011

Я смотрел на вывод моей сборки в Eclipse.Я кросс-компиляции для процессора ColdFire.Строка компиляции выглядит следующим образом:

m68k-elf-g++ -O2 -falign-functions=4 -IC:\nburn\include -IC:\nburn\MOD52...

, за которой следуют дополнительные файлы включения, очевидные флаги «компилятора» и, наконец, один исходный файл, который я изменил.Следующая строка снова вызывает тот же инструмент:

m68k-elf-g++ src\main.o src\TouchPanelMediator.o src\Startup.o....

, за которым следуют дополнительные файлы .o, некоторые файлы .ld и некоторые файлы .a.Похоже, что это связывает все различные типы объектных файлов.

В семействе Gnu есть g ++ какое-то приложение uber, которое может определить на основе аргументов, нужно ли его компилировать или связывать?Он имеет обе встроенные возможности или просто отправляет компиляцию в gcc и ссылку на ld, а мой журнал просто не показывает это?

Ответы [ 3 ]

37 голосов
/ 22 апреля 2011

g++ и gcc являются драйверами . Обычно они запускают препроцессор (cpp), собственно компилятор (cc1plus для C ++ и cc1 для C) и компоновщик (gold или GNU ld) и все другие необходимые вещи. Разница между gcc и g++ заключается в том, что последняя включает в себя одну дополнительную библиотеку для ссылки (libstdc++).

В зависимости от типа файла, к которому они вызваны, они могут пропустить некоторые шаги или сделать что-то по-другому. Для файлов .o не требуется, например, запускать сам компилятор или препроцессор.

Если вы передадите им -###, вы увидите, что он печатает инструменты, которые он вызывает на каждом этапе своего выполнения.

26 голосов
/ 22 апреля 2011

Взято из этого маленького руководства GCC :

На основании расширения файла, которое вы задали программе, она выбирает соответствующие команды, необходимые для преобразования источника, который вы ей дали, в указанный вами выходной файл.

С симпатичной маленькой блок-схемой того, что именно GCC делает в зависимости от расширений файлов:

input extensions      runs     if   output  

GCC run flow

2 голосов
/ 22 апреля 2011

Отправляет ссылку на лд.

Также смотрите здесь: Как получить команду компоновщика GCC?

...