我正在查看我在 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 而我的日志没有显示?
最佳答案
g++
和 gcc
是 驱动程序。通常,它们运行预处理器(cpp
)、编译器(cc1plus
用于 C++,cc1
用于 C)和链接器(gold 或 GNU ld ) 和所有其他必要的事情。 gcc
和 g++
之间的区别在于后者包含一个额外的库来链接 (libstdc++
)。
根据调用它们的文件类型,它们可能会省略一些步骤或做不同的事情。对于 .o
文件,它不需要运行适当的编译器或预处理器,例如。
如果您将 -###
传递给它们,您可以看到它打印在执行的每个步骤中调用的工具。
关于c++ - g++ 既是 C++ 编译器又是链接器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5759353/