GCC 选项 -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
之间是否有区别。
谢谢。
I know -Wl,-shared
is a option of ld. I've seen some person compile like this,
$ gcc -shared -Wl,-soname,libtest.so -o libtest.so *.o
And some person like this
$ gcc -Wl,-shared -Wl,-soname,libtest.so -o libtest.so *.o
So, I want to know if there is some difference between -shared
and -Wl,-shared
.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
将
-shared
传递给 gcc 或将-shared
传递给 ld(通过-Wl
)之间存在差异。将-shared
传递给 GCC 可能会在链接时启用或禁用其他标志。特别是,可能涉及不同的crt*
文件。要获取更多信息,请在 GCC 的
gcc/config/
目录和子目录中 grep for-shared
。编辑:举一个具体的例子:在 i386 FreeBSD 上,
gcc -shared
将链接到目标文件crtendS.o
中,而没有-shared
,它将链接到crtend.o
中。因此,-shared
和-Wl,-shared
并不等效。There is a difference between passing
-shared
to gcc or-shared
to ld (via-Wl
). Passing-shared
to GCC may enable or disable other flags at link time. In particular, differentcrt*
files might be involved.To get more information, grep for
-shared
in GCC'sgcc/config/
directory and subdirectories.Edit: To give a specific example: on i386 FreeBSD,
gcc -shared
will link in object filecrtendS.o
, while without-shared
, it will link incrtend.o
instead. Thus,-shared
and-Wl,-shared
are not equivalent.我认为没有什么区别。
-shared
不是gcc
支持的选项,无论您是否使用-Wl
指定它,它都会传递给链接器。 gcc 的-Wl
选项用于指定将逗号分隔的选项列表传递给链接器以进行进一步处理。I don't think there is any difference.
-shared
is not a supported option ofgcc
and it is passed to linker whether you specify it with-Wl
or not.-Wl
option of gcc is used to specify that a comma separated list of options is to be passed to linker for further processing.