为什么clang ++和gcc / g ++会生成链接不同的可执行文件

时间:2018-11-27 16:33:15

标签: c++ gcc linker clang

使用g ++和clang ++进行编译和链接时,期望生成的可执行文件的链接方式相同。

尽管某些参数传入,但在某些情况下,与g ++相比,clang ++可执行文件链接到的库似乎更多。

这可能导致功能上的差异,特别是对于在加载和卸载时自动执行的动态链接库而言。

为什么会这样?

1 个答案:

答案 0 :(得分:7)

事实证明,gcc具有默认情况下在ubuntu --as-needed中启用的功能,该功能使gcc有效地忽略了链接项目链中未引用任何符号的任何库

这可以在带有--no-as-needed标志的gcc中禁用。或者,您也可以发出-Wl,--as-needed作为clang ++遵循gcc行为的第一个选项。