我知道-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
之间是否有区别。
谢谢。
我知道-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
之间是否有区别。
谢谢。
将-shared
传递给gcc或者通过-Wl
传递给ld是有区别的。在链接时,向GCC传递-shared
可能会启用或禁用其他标志。特别是,在链接时可能涉及不同的crt*
文件。
要获取更多信息,请在GCC的gcc/config/
目录及其子目录中搜索-shared
。
编辑:举个具体的例子:在i386 FreeBSD上,gcc -shared
将链接对象文件crtendS.o
,而没有-shared
,它将链接crtend.o
。因此,-shared
和-Wl,-shared
不等同。
-shared
不是 gcc
的支持选项,无论您是否使用 -Wl
指定它,都会将其传递给链接器。 gcc
的 -Wl
选项用于指定要传递给链接器以进行进一步处理的逗号分隔选项列表。