g ++既是c ++编译器又是链接器?

Tod*_*Tod 18 c++ gcc gnu g++ ld

我正在查看Eclipse中构建的输出.我正在为ColdFire处理器进行交叉编译.编译行看起来像这样:

m68k-elf-g++ -O2 -falign-functions=4 -IC:\nburn\include -IC:\nburn\MOD52...
Run Code Online (Sandbox Code Playgroud)

接着是更多的包含文件,明显的"编译器"标志,最后是我改变的一个源文件.下一行再次调用相同的工具:

m68k-elf-g++ src\main.o src\TouchPanelMediator.o src\Startup.o....
Run Code Online (Sandbox Code Playgroud)

接着是更多的.o文件,一些.ld文件和一些.a文件.这似乎是将所有各种类型的目标文件链接在一起.

在Gnu家族中,g ++是一些超级应用程序,可以根据参数确定是否需要编译或链接?它是否具有内置的功能,或者它只是调度编译到gcc并链接到ld而我的日志只是没有显示?

Joh*_*itb 37

g++并且gcc司机.通常,它们运行预处理器(cpp),编译器(cc1plus适用于C++和cc1C)和链接器(gold或GNU ld)以及所有其他必要的操作.gcc和之间的区别在于g++后者包括一个用于链接(libstdc++)的附加库.

根据调用它们的文件类型,它们可能会省略某些步骤或以不同方式执行操作.例如.o,对于文件,它不需要运行正确的编译器或预处理器.

如果传递-###给它们,您可以看到它在其执行的每个步骤中打印它调用的工具.

  • 几秒钟前,我认为cpp是另一个C++编译器 (3认同)

Xeo*_*Xeo 26

取自这个小GCC指南:

根据您为程序提供的文件扩展名,它会选择运行所需的相应命令,以将您提供的源转换为您指定的输出文件.

有一个很好的GCC精确的流程图,取决于文件扩展名:

input extensions      runs     if   output  
Run Code Online (Sandbox Code Playgroud)

GCC运行流程