关于gcc:g ++既是c ++编译器又是链接器?

Is g++ both a c++ compiler and a linker?

我正在查看我的内置Eclipse的输出。我正在为一个Coldfire处理器进行交叉编译。编译行如下所示:

1
2
3
m68k-elf-g++ -O2 -falign-functions=4 -IC:
burn\include -IC:
burn\MOD52...

接下来是更多的include文件,明显的"compiler"标志,最后是我更改的一个源文件。下一行再次调用相同的工具:

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

然后是更多的.o文件,一些.ld文件和一些.a文件。这似乎将所有不同类型的对象文件链接在一起。

在GNU系列中,G++是一些可以根据参数确定是否需要编译或链接的Uber应用程序?它有内置的两种功能吗,或者只是将编译发送到gcc并链接到ld,而我的日志并没有显示这一点?


g++gcc是驱动程序。通常,它们运行预处理器(EDCOX1,2),编译器合适(ECDOX1,3,C++,EDCOX1,4,C),链接器(Gold或GNU LD)和其他所有需要的东西。gccg++的区别在于后者包括一个附加的库来链接(libstdc++)。

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

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


摘自GCC指南:

Based on the file extension that you gave your program, it selects the appropriate commands it needs to run to turn the source you gave it into the output file you specified.

根据文件扩展名,有一个很好的GCC具体功能流程图:

1
input extensions      runs     if   output

GCC run flow


它发送链接到ld。

另请参见此处:如何获取gcc链接器命令?