当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 运行时共享库总是只搜索编译时的路径
帖子发表于 : 2012-06-06 13:34 

注册: 2012-06-06 13:13
帖子: 2
送出感谢: 0 次
接收感谢: 0 次
自己写了一个共享库,其中用到了第三方的共享库(用的是隐式链接,include头文件的那种)。编译完成之后,本机能够运行。但是将程序安装到其他机器后,由于第三方的共享库的路径与编译时侯的不一样,结果就提示找不到共享库。 将第三方的共享库就是放到/usr/lib;/usr/local/lib里面,依然提示找不到。 简单的来说,就是程序认定了去编译链接时候的共享库路径了,其他如LD_LIBRARY_PATH,ldconfig的方法,包括放到/usr/lib目录等等方法,都不行。 不知道是不是在编译的时候,限定了共享库的搜索路径,因为用codeblocks作为IDE,还没摸清gcc的那些编译选项在哪里。

[email protected]:~/TradeBlazer/TradeServer$ ldd ./teller/libTellerHSN.so
linux-gate.so.1 => (0xb7735000)
/home/liukz/svn/TBPlatformServer/ThirdPart/bin/HSN/linux.i386/libhsfutusdk.so => not found(编译时候的路径里面没有,提示 not found)
/home/liukz/svn/TBPlatformServer/ThirdPart/bin/HSN/linux.i386/libt2sdk.so (0xb7390000)(这个路径里面有的就能找到)
libIce.so.34 => /usr/lib/libIce.so.34 (0xb70d8000)
libIceBox.so.34 => /usr/lib/libIceBox.so.34 (0xb709c000)
libIceUtil.so.34 => /usr/lib/libIceUtil.so.34 (0xb705c000)
libIceStorm.so.34 => /usr/lib/libIceStorm.so.34 (0xb7022000)
libGlacier2.so.34 => /usr/lib/libGlacier2.so.34 (0xb6f7e000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb6e98000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6e7a000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6cd5000)
libcrypto.so.4 => /usr/lib/libcrypto.so.4 (0xb6b57000)
libssl.so.4 => /usr/lib/libssl.so.4 (0xb6b08000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6adb000)
libbz2.so.1.0 => /lib/i386-linux-gnu/libbz2.so.1.0 (0xb6aca000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb6ac5000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb6aaa000)
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb6aa1000)
/lib/ld-linux.so.2 (0xb7736000)


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 运行时共享库总是只搜索编译时的路径
帖子发表于 : 2012-06-06 14:20 

注册: 2012-06-06 13:13
帖子: 2
送出感谢: 0 次
接收感谢: 0 次
用 readelf察看,第三方的依赖库就是带有路径的,而标准c++库就不带路径。是不是和这个有关?

Dynamic section at offset 0x32ced0 contains 31 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libIce.so.34]
0x00000001 (NEEDED) Shared library: [libIceBox.so.34]
0x00000001 (NEEDED) Shared library: [libIceUtil.so.34]
0x00000001 (NEEDED) Shared library: [libIceStorm.so.34]
0x00000001 (NEEDED) Shared library: [libGlacier2.so.34]
0x00000001 (NEEDED) Shared library: [/home/liukz/svn/TBPlatformServer/ThirdPart/bin/HSN/linux.i386/libhsfutusdk.so] (包含路径)
0x00000001 (NEEDED) Shared library: [libstdc++.so.6](不带路径)
0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x0000000c (INIT) 0x18e66c
0x0000000d (FINI) 0x2a24e8
0x00000019 (INIT_ARRAY) 0x32ddfc
0x0000001b (INIT_ARRAYSZ) 192 (bytes)
0x6ffffef5 (GNU_HASH) 0x138
0x00000005 (STRTAB) 0x382ec
0x00000006 (SYMTAB) 0x1300c
0x0000000a (STRSZ) 809442 (bytes)
0x0000000b (SYMENT) 16 (bytes)
0x00000003 (PLTGOT) 0x32dff4
0x00000002 (PLTRELSZ) 16 (bytes)
0x00000014 (PLTREL) REL
0x00000017 (JMPREL) 0x18e65c
0x00000011 (REL) 0x1027dc
0x00000012 (RELSZ) 573056 (bytes)
0x00000013 (RELENT) 8 (bytes)
0x00000016 (TEXTREL) 0x0
0x6ffffffe (VERNEED) 0x10272c
0x6fffffff (VERNEEDNUM) 3
0x6ffffff0 (VERSYM) 0xfdcce
0x6ffffffa (RELCOUNT) 7146
0x00000000 (NULL) 0x0


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 运行时共享库总是只搜索编译时的路径
帖子发表于 : 2012-06-13 13:09 

注册: 2011-10-15 0:32
帖子: 233
送出感谢: 16
接收感谢: 2
一般裝好庫文件後如果提示找不到庫 就執行ldconfig -v命令刷新系統的共享庫列表。只是把文件考到lib目錄一般不起作用的。


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 运行时共享库总是只搜索编译时的路径
帖子发表于 : 2012-06-17 11:31 
头像

注册: 2007-03-24 23:45
帖子: 2357
送出感谢: 0 次
接收感谢: 9
ld 有选项的,指定了链接库的绝对路径
你必须找出来用了这个选项的地方


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译