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

标签 c++ gcc g++ gnu ld

我正在查看我在 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 ) 和所有其他必要的事情。 gccg++ 之间的区别在于后者包含一个额外的库来链接 (libstdc++)。

根据调用它们的文件类型,它们可能会省略一些步骤或做不同的事情。对于 .o 文件,它不需要运行适当的编译器或预处理器,例如。

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

关于c++ - g++ 既是 C++ 编译器又是链接器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5759353/

相关文章:

c++ - 使用 g++ 的 TCP 服务器客户端

c++ - 如何让g++运算符重载错误更简洁?

C++ 编译错误,需要帮助 - ld : symbol(s) not found for architecture x86_64

c++ - 异常处理不适用于 Windows 上的 Qt

c - Windows 中的 GCC 包括头文件

c++ - rapidjson::std::pair 中的文档

c - GCC 和 Borland Turbo C 中 printf() 语句的不同输出

GCC 忽略 cdecl?

带有冒泡排序的 C++ 结构

c++ - 如何将 vector 中的可变参数转换为它是参数的持有者?