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

Cat*_*kul 4 c++ linker gcc clang

在编译和链接g ++和clang ++时,期望生成的可执行文件在链接方面的链接相同.

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

这可能会导致功能差异,尤其是在加载和卸载时自动执行的动态链接库方面.

为什么会这样?

Cat*_*kul 7

事实证明,gcc在ubuntu --as-needed中默认启用了一个功能,这会导致gcc有效地忽略链接项链中没有引用任何符号的库.

这可以在带有--no-as-needed标志的gcc中禁用.或者你可以发出-Wl,--as-needed第一个选项来clang ++来表现gcc的行为方式.