GCC选项的-shared和-Wl,-shared之间的区别

时间:2011-01-07 08:57:47

标签: linux unix gcc linker shared-libraries

我知道-Wl,-shared ld 的选项。我见过有人像这样编译,

$ 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 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:0)

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