Chinaunix
标题:
【解决】为什么有些库系统自带了,可是里面的符号表却是空的无法使用,像icu4c库
[打印本页]
作者:
yayu_myself
时间:
2011-09-05 10:22
标题:
【解决】为什么有些库系统自带了,可是里面的符号表却是空的无法使用,像icu4c库
本帖最后由 yayu_myself 于 2011-09-05 14:17 编辑
系统是Ubuntu10.x的。。
icu4c是个进行软件国际化的库。。系统默认在/usr/lib下有相应的动态库文件,如下:
$ ls -lh /usr/lib/libicu*
lrwxrwxrwx 1 root root 18 2011-06-29 09:05 /usr/lib/libicudata.so -> libicudata.so.42.1
lrwxrwxrwx 1 root root 18 2011-06-28 17:25 /usr/lib/libicudata.so.42 -> libicudata.so.42.1
-rw-r--r-- 1 root root 16M 2009-11-24 06:55 /usr/lib/libicudata.so.42.1
lrwxrwxrwx 1 root root 18 2011-06-29 09:05 /usr/lib/libicui18n.so -> libicui18n.so.42.1
lrwxrwxrwx 1 root root 18 2011-06-28 17:25 /usr/lib/libicui18n.so.42 -> libicui18n.so.42.1
-rw-r--r-- 1 root root 1.8M 2009-11-24 06:55 /usr/lib/libicui18n.so.42.1
lrwxrwxrwx 1 root root 16 2011-06-29 09:05 /usr/lib/libicuio.so -> libicuio.so.42.1
lrwxrwxrwx 1 root root 16 2011-06-28 17:25 /usr/lib/libicuio.so.42 -> libicuio.so.42.1
-rw-r--r-- 1 root root 42K 2009-11-24 06:55 /usr/lib/libicuio.so.42.1
lrwxrwxrwx 1 root root 16 2011-06-29 09:05 /usr/lib/libicule.so -> libicule.so.42.1
lrwxrwxrwx 1 root root 16 2011-06-28 17:25 /usr/lib/libicule.so.42 -> libicule.so.42.1
-rw-r--r-- 1 root root 222K 2009-11-24 06:55 /usr/lib/libicule.so.42.1
lrwxrwxrwx 1 root root 16 2011-06-29 09:05 /usr/lib/libiculx.so -> libiculx.so.42.1
lrwxrwxrwx 1 root root 16 2011-06-28 17:25 /usr/lib/libiculx.so.42 -> libiculx.so.42.1
-rw-r--r-- 1 root root 50K 2009-11-24 06:55 /usr/lib/libiculx.so.42.1
lrwxrwxrwx 1 root root 16 2011-06-29 09:05 /usr/lib/libicutu.so -> libicutu.so.42.1
lrwxrwxrwx 1 root root 16 2011-06-28 17:25 /usr/lib/libicutu.so.42 -> libicutu.so.42.1
-rw-r--r-- 1 root root 128K 2009-11-24 06:55 /usr/lib/libicutu.so.42.1
lrwxrwxrwx 1 root root 16 2011-06-29 09:05 /usr/lib/libicuuc.so -> libicuuc.so.42.1
lrwxrwxrwx 1 root root 16 2011-06-28 17:25 /usr/lib/libicuuc.so.42 -> libicuuc.so.42.1
-rw-r--r-- 1 root root 1.3M 2009-11-24 06:55 /usr/lib/libicuuc.so.42.1
复制代码
可是用nm查看符号表是空的,这些库也不小啊,如下:
$ nm /usr/lib/libicu*
/usr/lib/libicudata.so.42:
nm: /usr/lib/libicudata.so.42: no symbols
/usr/lib/libicudata.so.42.1:
nm: /usr/lib/libicudata.so.42.1: no symbols
/usr/lib/libicui18n.so.42:
nm: /usr/lib/libicui18n.so.42: no symbols
/usr/lib/libicui18n.so.42.1:
nm: /usr/lib/libicui18n.so.42.1: no symbols
/usr/lib/libicuio.so.42:
nm: /usr/lib/libicuio.so.42: no symbols
/usr/lib/libicuio.so.42.1:
nm: /usr/lib/libicuio.so.42.1: no symbols
/usr/lib/libicule.so.42:
nm: /usr/lib/libicule.so.42: no symbols
/usr/lib/libicule.so.42.1:
nm: /usr/lib/libicule.so.42.1: no symbols
/usr/lib/libiculx.so.42:
nm: /usr/lib/libiculx.so.42: no symbols
/usr/lib/libiculx.so.42.1:
nm: /usr/lib/libiculx.so.42.1: no symbols
/usr/lib/libicutu.so.42:
nm: /usr/lib/libicutu.so.42: no symbols
/usr/lib/libicutu.so.42.1:
nm: /usr/lib/libicutu.so.42.1: no symbols
/usr/lib/libicuuc.so.42:
nm: /usr/lib/libicuuc.so.42: no symbols
/usr/lib/libicuuc.so.42.1:
nm: /usr/lib/libicuuc.so.42.1: no symbols
复制代码
如果默认指定-licuuc库,会链接到这个库,因为符号表是空的,连接完的程序也不能用,这些库是怎么回事呢。
作者:
hyq5436
时间:
2011-09-05 12:41
动态库里面的符号表,可以通过strip命令去除,这种情况下,你可以通过readelf来读取符号,如有错误还请指正~
作者:
yayu_myself
时间:
2011-09-05 14:12
回复
2#
hyq5436
确实通过readelf可以读出符号表,谢谢。另外编译问题,应该是我自身原因导致的,非常感谢。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2