Solaris 32 位 - 使用 gcc 构建共享对象
我正在尝试使用 gcc 版本 3.4.3 为 Solaris 32 位系统创建一个共享对象 (.so)。我在谷歌上搜索为Solaris创建共享对象所需的标志。在一些帖子中,我看到未使用“-shared”标志。相反,使用“-G”标志。我的印象是“-G”标志与“-g”相同,但似乎“-G”相当于“-shared”。我说得对吗?
原因是对于 SLES10 x86_64 系统,需要“-shared”标志来构建 .so。
我尝试了以下操作:-
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)
Update1 有用的建议来自 @user562374 使用 -shared 标志。
如果使用-shared构建的共享对象部署在使用不同编译器的solaris机器上,并且它是“静态”链接的,是否会导致任何问题?当我说“静态”链接的 .so 时,我的意思是共享对象在 make 文件中链接,而不是使用“dlsym”。
I am trying to crate a shared object (.so) using gcc version 3.4.3 for Solaris 32 bit system. I was googling for flags required to create a shared object for solaris. In some of the posts , I see that "-shared" flag not used. Instead "-G" flag is used. I had an impression that "-G" flag is same as "-g", but it seems that "-G" is equivalent to "-shared". Am I correct?
The reason being that with SLES10 x86_64 systems, "-shared" flag was required to build .so.
I tried following:-
LIB=-L/lib -L/usr/local/lib -L/usr/lib
gcc -m32 -G -fPIC -o myapi.so.1 myapi.o $(LIB)
Do I need to change above to:-
gcc -m32 -shared -fPIC -o myapi.so.1 myapi.o $(LIB)
Update1
Helpful suggestion from
@user562374 to use -shared flag.
If the shared object built using -shared is deployed on solaris machine using different compiler and if it is "statically" linked, will it cause any issues? When I say "statically" linked .so, I mean shared object is linked in make file rather then using "dlsym".
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果是gcc,那就是
-shared
,因为-G
还有其他用途。If it's gcc, it's
-shared
, because-G
has other uses.