免费注册 查看新帖 |

Chinaunix

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

库文件的兼容性问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-16 22:48 |只看该作者 |倒序浏览
关于生成静态,动态库,有几个兼容性问题想请教大家

1. 静态库的
有些系统,特别是那些从Bekeley UNIX 衍生出来的系统,需要为静态链接库创建一个内容列表( a table of contents)
传统的做法是用ranlib libfoobar.a 的形式来创建,

但是注意到GNU 的 ar 有个s 参数与之功能相同,
只是不知单独使用 ar crs libfoo.a foo.o bar.o 创建的静态库在非Linux的系统上是否有兼容性问题?
(因为我只有Linux 系统,没其它的BSD系统进行测试,希望知道的人帮助解答一下,谢谢)

2. ld 生成的库
例如: 使用 gcc -fPIC -c file.c 生成 file.o 的目标文件,有人做过测试,在不同的系统中有不同的用法,如下:

FreeBSD:        ld -Bshareable -o file.so file.o
Solaris:        ld -G -o file.so file.o -ldl
Linux:          ld -Bshareable -o file.so file.o -ldl
IRIX:           ld -shared -o file.so file.o
OSF/1:          ld -shared -o file.so file.o

3. gcc -share 生成的库
兼容性不是很了解,假设我用
gcc -fPIC -g -c foo.c
gcc -fPIC -g -c bar.c

创建了目标文件 foo.o bar.o, 然后用

gcc -shared -Wl,-soname,libfoobar.so.0 -o libfoobar.so.0.0.1 foo.o bar.o -lc
ldconfig -n .
ln -sf libfoobar.so.0 libfoobar.so

生成libfoobar.so 请问在其它的系统中是否存在兼容性问题?需要注意些什么?

4.其它方式生成的库
这个我不是很了解,如果谁知道,请介绍一下相关资料,谢谢!

论坛徽章:
0
2 [报告]
发表于 2007-07-06 21:50 |只看该作者
今天到unix体验中心的FreeBSD上测试了一下

1. 静态库的
因为unix体验中心是用gnu的编译器,所以ar 没加 s 参数也可以正常使用,需要更多一些测试

目前测试的情况是,
如果在Linux编译,生成libfoo.a 再到FreeBSD中使用,会有兼容性问题
如果在FreeBSD编译,生成libfoo.a 再到Linux中使用,会有兼容性问题

2.gcc -share 生成的库

FreeBSD中的 ldconfig 没有-n 参数

如果在Linux编译,生成libfoobar.so 再到FreeBSD中使用,会有兼容性问题
如果在FreeBSD编译,生成libfoobar.so 再到Linux中使用,会有兼容性问题

-bash-2.05b$ g++ -g -o main main.o -L. -lfoobar
/usr/bin/ld: skipping incompatible ./libfoobar.so when searching for -lfoobar
/usr/bin/ld: cannot find -lfoobar

-bash-2.05b$ nm libfoobar.so
0000000000100ac8 d DW.ref.__gxx_personality_v0
0000000000100bd0 A _DYNAMIC
0000000000100d78 A _GLOBAL_OFFSET_TABLE_
                 w _Jv_RegisterClasses
0000000000100d58 d __CTOR_END__
0000000000100d50 d __CTOR_LIST__
0000000000100d68 d __DTOR_END__
0000000000100d60 d __DTOR_LIST__
0000000000100ad0 r __EH_FRAME_BEGIN__
0000000000100b88 r __FRAME_END__
0000000000100d70 d __JCR_END__
0000000000100d70 d __JCR_LIST__
0000000000100dd8 A __bss_start
                 w __cxa_finalize
                 w __deregister_frame_info
00000000000009c0 t __do_global_ctors_aux
00000000000008b0 t __do_global_dtors_aux
0000000000100ab8 d __dso_handle
                 U __gxx_personality_v0
                 w __register_frame_info
0000000000100dd8 A _edata
0000000000100e30 A _end
00000000000009f8 T _fini
0000000000000830 T _init
00000000000009a0 T bar
0000000000100de0 b completed.1
0000000000000960 T foo
0000000000000910 t frame_dummy
0000000000100e00 b object.2
0000000000100ac0 d p.0
                 U printf
-bash-2.05b$ cd tmp
-bash-2.05b$ nm libfoobar.so 这个是在linux中生成的so文件
0000000000001754 d DW.ref.__gxx_personality_v0
0000000000001640 a _DYNAMIC
0000000000001734 a _GLOBAL_OFFSET_TABLE_
         w _Jv_RegisterClasses
0000000000001630 d __CTOR_END__
000000000000162c d __CTOR_LIST__
0000000000001638 d __DTOR_END__
0000000000001634 d __DTOR_LIST__
0000000000000628 r __FRAME_END__
000000000000163c d __JCR_END__
000000000000163c d __JCR_LIST__
0000000000001758 A __bss_start
         w __cxa_finalize@@GLIBC_2.1.3
0000000000000550 t __do_global_ctors_aux
0000000000000440 t __do_global_dtors_aux
000000000000174c d __dso_handle
         w __gmon_start__
         U __gxx_personality_v0@@CXXABI_1.3
00000000000004d7 t __i686.get_pc_thunk.bx
0000000000001758 A _edata
000000000000175c A _end
0000000000000584 T _fini
00000000000003b8 T _init
000000000000051c T bar
0000000000000410 t call_gmon_start
0000000000001758 b completed.5758
00000000000004dc T foo
00000000000004a0 t frame_dummy
0000000000001750 d p.5756
         U puts@@GLIBC_2.0

[ 本帖最后由 antonym55 于 2007-7-6 21:51 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP