免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6382 | 回复: 13
打印 上一主题 下一主题

请问如何在unix下编写动态连接库.so [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-02-27 16:34 |只看该作者 |倒序浏览
请高手指点

论坛徽章:
0
2 [报告]
发表于 2003-02-27 16:43 |只看该作者

请问如何在unix下编写动态连接库.so

. 创建一个共享函数库

现在我们开始学习如何创建一个共享函数库。其实创建一个共享函数库非常容易。首先创建object文件,这个文件将加入通过gcc –fPIC 参数命令加入到共享函数库里面。PIC的意思是“位置无关代码”(Position Independent Code)。下面是一个标准的格式:

gcc -shared -Wl,-soname,your_soname -o library_name file_list library_list

下面再给一个例子,它创建两个object文件(a.o和b.o),然后创建一个包含a.o和b.o的共享函数库。例子中”-g”和“-Wall”参数不是必须的。

gcc -fPIC -g -c -Wall a.c
gcc -fPIC -g -c -Wall b.c
gcc -shared -Wl,-soname,liblusterstuff.so.1 -o liblusterstuff.so.1.0.1 a.o b.o -lc

下面是一些需要注意的地方:

· 不用使用-fomit-frame-pointer这个编译参数除非你不得不这样。虽然使用了这个参数获得的函数库仍然可以使用,但是这使得调试程序几乎没有用,无法跟踪调试。

· 使用-fPIC来产生代码,而不是-fpic。

· 某些情况下,使用gcc 来生成object文件,需要使用“-Wl,-export-dynamic”这个选项参数。通常,动态函数库的符号表里面包含了这些动态的对象的符号。这个选项在创建ELF格式的文件时候,会将所有的符号加入到动态符号表中。可以参考ld的帮助获得更详细的说明。

论坛徽章:
0
3 [报告]
发表于 2003-02-27 17:17 |只看该作者

请问如何在unix下编写动态连接库.so

能不能讲的清晰一些。
我刚刚做了两个.c文件,fred.c和bill.c
然后执行cc -fPIC -c fred.c
出现提示-f option ignored on this processor
请问是什么原因

谢谢

论坛徽章:
0
4 [报告]
发表于 2003-02-28 08:50 |只看该作者

请问如何在unix下编写动态连接库.so

你是在什么平台上运行的
以及使用什么cc  编译器

可能有的平台上不提供fPIC   
对此可能是使用fpic
看看你的cc 的man

论坛徽章:
0
5 [报告]
发表于 2003-02-28 08:59 |只看该作者

请问如何在unix下编写动态连接库.so

在linux下,只要加上 -share就可以了。

论坛徽章:
0
6 [报告]
发表于 2003-02-28 09:23 |只看该作者

请问如何在unix下编写动态连接库.so

我用的scounix5.05,cc的版本怎么看

我还做了如下编译
# cc -fpic -c fred.c
-f option ignored on this processor
cc:  'acomp' '-i' 'fred.c' '-o' '/tmp/ctm2AAAa0009e' '-f' 'fred.c' '-ds' '-dl' '
-y0,/usr/include' '-Qy' '-Xa' '-D__i386' '-D_SCO_DS=1' '-D__unix' '-D_M_I386' '-
D_M_XENIX' '-D_M_UNIX' '-D_SCO_C_DIALECT=1' '-D_STRICT_NAMES' '-D_M_I86' '-D_M_I
86SM' '-D_M_SDATA' '-D_M_STEXT' '-D_M_BITFIELDS' '-D_M_INTERNAT' '-D_M_SYS5' '-D
_M_SYSV' '-D_M_SYSIII' '-D_M_WORDSWAP' '-Di386' '-Dunix' '-DM_I386' '-DM_UNIX' '
-DM_XENIX' '-D_SCO_XPG_VERS=4' '-D_M_COFF' '-D_SCO_COFF' '-p'
cc:  'as' '-o' 'fred.o' '/tmp/ctm2AAAa0009e'

.o文件到是生成了,就是不知对不对

论坛徽章:
0
7 [报告]
发表于 2003-02-28 09:32 |只看该作者

请问如何在unix下编写动态连接库.so

fPIC功能是产生位置无关代码
所以在产生库时要使用

shared 表示生成共享库

看版本使用
cc -v

论坛徽章:
0
8 [报告]
发表于 2003-02-28 09:38 |只看该作者

请问如何在unix下编写动态连接库.so

斑竹能详细介绍一下unix下产生动态连接库的原理吗?例如我对位置无关代码和主行共享库的概念就不怎么明白

论坛徽章:
0
9 [报告]
发表于 2003-02-28 09:44 |只看该作者

请问如何在unix下编写动态连接库.so

主行是打错
应该是生成

http://www.fanqiang.com/a4/b2/20020806/060200284.html
有解释

另外我想我不是高手

并且也不是专门回答问题的

就是我找到的资料也只是在google上找到的

所以要我再深一步的讲
我也讲不出来

论坛徽章:
0
10 [报告]
发表于 2003-02-28 09:50 |只看该作者

请问如何在unix下编写动态连接库.so

非常感谢斑竹对我的一次又一次的烦琐问题的回答,多谢啦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP