【问题标题】:Is g++ both a c++ compiler and a linker?g++ 既是 C++ 编译器又是链接器?
【发布时间】:2011-08-11 04:31:48
【问题描述】:

我正在查看我在 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 而我的日志没有显示?

【问题讨论】:

标签: c++ gcc g++ gnu ld


【解决方案1】:

g++gcc驱动程序。通常,它们会运行预处理器(cpp)、编译器(cc1plus 用于 C++,cc1 用于 C)和链接器(gold 或 GNU ld)以及所有其他必要的东西。 gccg++ 之间的区别在于后者包括一个额外的库来链接 (libstdc++)。

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

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

【讨论】:

  • 几秒前我还以为cpp是另一个C++编译器
【解决方案2】:

取自this little GCC guide

根据您为程序提供的文件扩展名,它会选择需要运行的适当命令,以将您提供的源代码转换为您指定的输出文件。

根据文件扩展名,通过一个漂亮的小流程图来说明 GCC 究竟做了什么:

input extensions      runs     if   output  

【讨论】:

    【解决方案3】:

    它发送链接到 ld。

    另见此处: How to get GCC linker command?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-23
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多