GCC选项中-shared和-Wl,-shared的区别

13

我知道-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之间是否有区别。

谢谢。

2个回答

14

-shared传递给gcc或者通过-Wl传递给ld是有区别的。在链接时,向GCC传递-shared可能会启用或禁用其他标志。特别是,在链接时可能涉及不同的crt*文件。

要获取更多信息,请在GCC的gcc/config/目录及其子目录中搜索-shared

编辑:举个具体的例子:在i386 FreeBSD上,gcc -shared将链接对象文件crtendS.o,而没有-shared,它将链接crtend.o。因此,-shared-Wl,-shared不等同。


1
在当前的gcc svn主干中,我在gcc/config/i386/linux.h的第85行发现了以下注释:“提供适用于Linux的LINK_SPEC。在这里,我们提供对特殊GCC选项-static和-shared的支持,它们允许我们通过在链接时应用适当的选项组合来以这三种模式之一链接东西。” - Yantao Xie
嗨,FX,你能给出更具体的解释吗?谢谢。 - Yantao Xie

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

我的情况有所不同,使用-Wl编译项目会出现错误。 - johan d

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接