Chinaunix

标题: 【解决】为什么有些库系统自带了,可是里面的符号表却是空的无法使用,像icu4c库 [打印本页]

作者: yayu_myself    时间: 2011-09-05 10:22
标题: 【解决】为什么有些库系统自带了,可是里面的符号表却是空的无法使用,像icu4c库
本帖最后由 yayu_myself 于 2011-09-05 14:17 编辑

系统是Ubuntu10.x的。。

icu4c是个进行软件国际化的库。。系统默认在/usr/lib下有相应的动态库文件,如下:
  1. $ ls -lh /usr/lib/libicu*
  2. lrwxrwxrwx 1 root root   18 2011-06-29 09:05 /usr/lib/libicudata.so -> libicudata.so.42.1
  3. lrwxrwxrwx 1 root root   18 2011-06-28 17:25 /usr/lib/libicudata.so.42 -> libicudata.so.42.1
  4. -rw-r--r-- 1 root root  16M 2009-11-24 06:55 /usr/lib/libicudata.so.42.1
  5. lrwxrwxrwx 1 root root   18 2011-06-29 09:05 /usr/lib/libicui18n.so -> libicui18n.so.42.1
  6. lrwxrwxrwx 1 root root   18 2011-06-28 17:25 /usr/lib/libicui18n.so.42 -> libicui18n.so.42.1
  7. -rw-r--r-- 1 root root 1.8M 2009-11-24 06:55 /usr/lib/libicui18n.so.42.1
  8. lrwxrwxrwx 1 root root   16 2011-06-29 09:05 /usr/lib/libicuio.so -> libicuio.so.42.1
  9. lrwxrwxrwx 1 root root   16 2011-06-28 17:25 /usr/lib/libicuio.so.42 -> libicuio.so.42.1
  10. -rw-r--r-- 1 root root  42K 2009-11-24 06:55 /usr/lib/libicuio.so.42.1
  11. lrwxrwxrwx 1 root root   16 2011-06-29 09:05 /usr/lib/libicule.so -> libicule.so.42.1
  12. lrwxrwxrwx 1 root root   16 2011-06-28 17:25 /usr/lib/libicule.so.42 -> libicule.so.42.1
  13. -rw-r--r-- 1 root root 222K 2009-11-24 06:55 /usr/lib/libicule.so.42.1
  14. lrwxrwxrwx 1 root root   16 2011-06-29 09:05 /usr/lib/libiculx.so -> libiculx.so.42.1
  15. lrwxrwxrwx 1 root root   16 2011-06-28 17:25 /usr/lib/libiculx.so.42 -> libiculx.so.42.1
  16. -rw-r--r-- 1 root root  50K 2009-11-24 06:55 /usr/lib/libiculx.so.42.1
  17. lrwxrwxrwx 1 root root   16 2011-06-29 09:05 /usr/lib/libicutu.so -> libicutu.so.42.1
  18. lrwxrwxrwx 1 root root   16 2011-06-28 17:25 /usr/lib/libicutu.so.42 -> libicutu.so.42.1
  19. -rw-r--r-- 1 root root 128K 2009-11-24 06:55 /usr/lib/libicutu.so.42.1
  20. lrwxrwxrwx 1 root root   16 2011-06-29 09:05 /usr/lib/libicuuc.so -> libicuuc.so.42.1
  21. lrwxrwxrwx 1 root root   16 2011-06-28 17:25 /usr/lib/libicuuc.so.42 -> libicuuc.so.42.1
  22. -rw-r--r-- 1 root root 1.3M 2009-11-24 06:55 /usr/lib/libicuuc.so.42.1
复制代码
可是用nm查看符号表是空的,这些库也不小啊,如下:
  1. $ nm /usr/lib/libicu*

  2. /usr/lib/libicudata.so.42:
  3. nm: /usr/lib/libicudata.so.42: no symbols

  4. /usr/lib/libicudata.so.42.1:
  5. nm: /usr/lib/libicudata.so.42.1: no symbols

  6. /usr/lib/libicui18n.so.42:
  7. nm: /usr/lib/libicui18n.so.42: no symbols

  8. /usr/lib/libicui18n.so.42.1:
  9. nm: /usr/lib/libicui18n.so.42.1: no symbols

  10. /usr/lib/libicuio.so.42:
  11. nm: /usr/lib/libicuio.so.42: no symbols

  12. /usr/lib/libicuio.so.42.1:
  13. nm: /usr/lib/libicuio.so.42.1: no symbols

  14. /usr/lib/libicule.so.42:
  15. nm: /usr/lib/libicule.so.42: no symbols

  16. /usr/lib/libicule.so.42.1:
  17. nm: /usr/lib/libicule.so.42.1: no symbols

  18. /usr/lib/libiculx.so.42:
  19. nm: /usr/lib/libiculx.so.42: no symbols

  20. /usr/lib/libiculx.so.42.1:
  21. nm: /usr/lib/libiculx.so.42.1: no symbols

  22. /usr/lib/libicutu.so.42:
  23. nm: /usr/lib/libicutu.so.42: no symbols

  24. /usr/lib/libicutu.so.42.1:
  25. nm: /usr/lib/libicutu.so.42.1: no symbols

  26. /usr/lib/libicuuc.so.42:
  27. nm: /usr/lib/libicuuc.so.42: no symbols

  28. /usr/lib/libicuuc.so.42.1:
  29. 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