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

标签 linux unix gcc linker shared-libraries

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

谢谢。

最佳答案

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

要获得更多信息,grep for -shared 在 GCC 的 gcc/config/ 目录和子目录中。

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

关于linux - GCC 选项的 -shared 和 -Wl,-shared 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4623915/

相关文章:

c++ - ALSA 在 Raspberry Pi 模拟输出上接收和播放原始 PCM 的配置

linux - 在系统范围内更改游标类型

node.js - 当服务器尚不可用时如何创建 Node.js Unix 套接字客户端

javascript - Socket.IO 应用程序未启动,无输出

c - 在 linux C 中寻找位图实现 API

linux - 获得 bash 的 cwd

java - jsch-->无法使用java从unix跳转服务器连接到另一个unix服务器

c - Linux/海湾合作委员会 : null address "00000000" with pthread compiler option

c++ - 从 constexpr 模板函数调用非 constexpr

c - 如何在 32 位和 64 位模式下获得相同的 double 运算行为?