使用g ++和clang ++进行编译和链接时,期望生成的可执行文件的链接方式相同。
尽管某些参数传入,但在某些情况下,与g ++相比,clang ++可执行文件链接到的库似乎更多。
这可能导致功能上的差异,特别是对于在加载和卸载时自动执行的动态链接库而言。
为什么会这样?
答案 0 :(得分:7)
事实证明,gcc具有默认情况下在ubuntu --as-needed
中启用的功能,该功能使gcc有效地忽略了链接项目链中未引用任何符号的任何库
这可以在带有--no-as-needed
标志的gcc中禁用。或者,您也可以发出-Wl,--as-needed
作为clang ++遵循gcc行为的第一个选项。