【发布时间】:2011-02-06 22:53:20
【问题描述】:
我正在尝试使用适用于 Solaris 32 位系统的 gcc 版本 3.4.3 创建一个共享对象 (.so)。我在谷歌上搜索为 solaris 创建共享对象所需的标志。在某些帖子中,我看到未使用“-shared”标志。而是使用“-G”标志。我的印象是“-G”标志与“-g”相同,但似乎“-G”相当于“-shared”。我说的对吗?
原因是对于 SLES10 x86_64 系统,构建 .so 需要“-shared”标志。
我尝试了以下操作:-
LIB=-L/lib -L/usr/local/lib -L/usr/lib
gcc -m32 -G -fPIC -o myapi.so.1 myapi.o $(LIB)
我是否需要将以上更改为:-
gcc -m32 -shared -fPIC -o myapi.so.1 myapi.o $(LIB)
更新1 有用的建议来自 @user562374 使用 -shared 标志。
如果使用 -shared 构建的共享对象使用不同的编译器部署在 solaris 机器上,并且如果它是“静态”链接的,会导致任何问题吗?当我说“静态”链接的 .so 时,我的意思是共享对象在 make 文件中链接,而不是使用“dlsym”。
【问题讨论】:
-
这不是“静态”链接的意思。静态链接意味着将您需要的 .a 库的部分复制到二进制文件中,而不是使用共享对象。如果共享对象与 dlopen 一起使用,它应该与正常的动态库链接(您错误地称为“静态”的东西)一起使用。
标签: c gcc solaris shared-libraries