【问题标题】:Solaris 32 bit - build shared object using gccSolaris 32 位 - 使用 gcc 构建共享对象
【发布时间】: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


【解决方案1】:
   -G num
       Put global and static objects less than or equal to num
       bytes into the small data or bss sections instead of the
       ...

如果是gcc,就是-shared,因为-G还有其他用途。

【讨论】:

  • @user562374..感谢您的快速回复。如果使用 -shared 构建的共享对象使用不同的编译器部署在 solaris 机器上,并且如果它是“静态”链接的,它会导致任何问题吗?当我说“静态”排列的 .so 时,我的意思是共享对象链接在 make 文件中,而不是使用“GetProcAddress”。
猜你喜欢
  • 2010-12-01
  • 2013-11-14
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 2020-03-10
  • 2010-11-24
相关资源
最近更新 更多