代码之家  ›  专栏  ›  技术社区  ›  Catskul

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

  •  4
  • Catskul  · 技术社区  · 6 年前

    当编译和链接到g++和clang++时,期望得到的可执行文件在链接方面是相等的。

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

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

    为什么会这样?

    1 回复  |  直到 6 年前
        1
  •  7
  •   Catskul    6 年前

    事实证明,GCC在Ubuntu中默认启用了一个特性。 --as-needed 这使得GCC有效地忽略了链接项链中没有引用其符号的任何库。

    在GCC中,可以通过 --no-as-needed 旗帜。或者你也可以发行 -Wl,--as-needed 作为clang++的第一个选项,它可以像gcc那样工作。