【问题标题】:Difference between -shared and -Wl,-shared of the GCC optionsGCC 选项的 -shared 和 -Wl,-shared 之间的区别
【发布时间】:2011-06-05 03:59:34
【问题描述】:

我知道-Wl,-sharedld 的一个选项。我见过有人这样编译,

$ gcc -shared -Wl,-soname,libtest.so -o libtest.so *.o

还有这样的人

$ gcc -Wl,-shared -Wl,-soname,libtest.so -o libtest.so *.o

所以,我想知道-shared-Wl,-shared 之间是否有一些区别。

谢谢。

【问题讨论】:

    标签: linux unix gcc linker shared-libraries


    【解决方案1】:

    -shared 传递给gcc 或-shared 传递给ld(通过-Wl)之间存在差异。将-shared 传递给 GCC 可能会在链接时启用或禁用其他标志。特别是,可能涉及不同的crt* 文件。

    要获取更多信息,请在 GCC 的 gcc/config/ 目录和子目录中查找 -shared

    编辑: 举一个具体的例子:在 i386 FreeBSD 上,gcc -shared 将链接到目标文件 crtendS.o,而没有 -shared,它将改为链接到 crtend.o。因此,-shared-Wl,-shared 不是等价的。

    【讨论】:

    • 在当前gcc的svn主干中,我在gcc/config/i386/linux.h的第85行找到了以下cmets。 “提供适合 Linux 的 LINK_SPEC。在这里,我们提供对特殊 GCC 选项 -static 和 -shared 的支持,这允许我们通过在链接时应用适当的选项组合以这三种模式之一链接事物。”跨度>
    • 嗨,FX,你能给出更具体的解释吗?谢谢。
    【解决方案2】:

    我认为没有任何区别。 -shared 不是 gcc 的受支持选项,无论您是否使用 -Wl 指定它,它都会传递给链接器。 gcc 的-Wl 选项用于指定将逗号分隔的选项列表传递给链接器进行进一步处理。

    【讨论】:

    • 存在差异。在我的情况下,项目不会使用 -Wl 编译。
    猜你喜欢
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 2011-05-31
    • 2019-08-08
    相关资源
    最近更新 更多