请教共享库运行时加载的问题

shager 2012-06-05 05:03:55
写了一个共享库,其中用到了其他的共享库(隐式链接),最后运行的时候,这个共享库在搜索其他共享库的时候,执着的去搜索编译时候指定的共享库的链接路径;如果建立一个和编译时一样的路径,能够正常的搜索到其他依赖共享库。可是在实际运行的时候,依赖共享库和编译时链接的路径不一样。无论我用LD_LIBRARY_PATH环境变量还是用ldconfig,或是把依赖共享库复制到/usr/lib目录下,都提示找不到, 隐式链接的共享库只能在链接的路径去搜索吗?
...全文
226 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2012-06-07
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

杯具的就是放到这两个目录也提示找不到,除非编译时候共享库的路径就在这两个位置,那么就能找到
引用 12 楼 的回复:

export LD_LIBRARY_PATH=xxx 指定动态库目录,否则就应该将所有动态库放到/usr/lib,/usr/local/lib下,这样才会被查找到。
[/Quote]

是的,首先编译时候要指定动态库的目录,其次LD_LIBRARY_PATH要和那个指定的目录一致。具体原因我也不明白为什么会和动态库目录位置相关。
shager 2012-06-07
  • 打赏
  • 举报
回复
杯具的就是放到这两个目录也提示找不到,除非编译时候共享库的路径就在这两个位置,那么就能找到
[Quote=引用 12 楼 的回复:]

export LD_LIBRARY_PATH=xxx 指定动态库目录,否则就应该将所有动态库放到/usr/lib,/usr/local/lib下,这样才会被查找到。
[/Quote]
shager 2012-06-07
  • 打赏
  • 举报
回复
首先感谢你的回复,现在大概能够解决上述问题了,但是原来还是不太清楚。

在codeblocks里面使用了绝对路径来指定共享库,codeblocks会分析这些库,如果不是标准的库,则会用-Wl,-soname, /path/libXXX.so 来编译,结果就成了前面描述的,用ldd和readelf看到的依赖库(非标准的)就带了绝对路径。如果在codeblocks设置共享库搜索路径,然后在需要加链接库的位置填上去掉前面的lib和后面的.so后剩下的那部分,也就是-l参数的要求,然后编译出来的共享库就正常了。 后来直接用 g++分别配合-Wl,-soname 和 -lXXX编译选项来编译,结果是一样的。

[Quote=引用 14 楼 的回复:]

引用 13 楼 的回复:

杯具的就是放到这两个目录也提示找不到,除非编译时候共享库的路径就在这两个位置,那么就能找到
引用 12 楼 的回复:

export LD_LIBRARY_PATH=xxx 指定动态库目录,否则就应该将所有动态库放到/usr/lib,/usr/local/lib下,这样才会被查找到。


是的,首先编译时候要指定动态库的目录,其次LD_LIBRAR……
[/Quote]
justkk 2012-06-06
  • 打赏
  • 举报
回复
LIBPATH 这个环境变量是否有用?
shager 2012-06-06
  • 打赏
  • 举报
回复
简单的说,就是程序只认编译时共享库的路路径,就是放到/usr/lib都提示找不到,用ldd也是提示notfound
shager 2012-06-06
  • 打赏
  • 举报
回复
肯定是有问题才提的,还麻烦知道的老大们指点一下。
shager 2012-06-06
  • 打赏
  • 举报
回复
没有发过同样的问题吧?
qq120848369 2012-06-06
  • 打赏
  • 举报
回复
export LD_LIBRARY_PATH=xxx 指定动态库目录,否则就应该将所有动态库放到/usr/lib,/usr/local/lib下,这样才会被查找到。
shager 2012-06-06
  • 打赏
  • 举报
回复
ukz@ubuntu:~/TradeBlazer/TradeServer$ ldd ./teller/libTellerHSN.so
linux-gate.so.1 => (0xb77bd000)
/usr/lib/libhsfutusdk.so (0xb73d0000)
/usr/lib/libt2sdk.so (0xb735e000)
没有 "=>"
libIce.so.34 => /usr/lib/libIce.so.34 (0xb70a6000)
libIceBox.so.34 => /usr/lib/libIceBox.so.34 (0xb706a000)
libIceUtil.so.34 => /usr/lib/libIceUtil.so.34 (0xb702a000)
libIceStorm.so.34 => /usr/lib/libIceStorm.so.34 (0xb6ff0000)
libGlacier2.so.34 => /usr/lib/libGlacier2.so.34 (0xb6f4c000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb6e66000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6e48000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6ca3000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb6c88000)
libt2sdk.so => /usr/local/lib/libt2sdk.so (0xb6c16000)
libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xb6c0f000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6be3000)
libcrypto.so.4 => /usr/lib/libcrypto.so.4 (0xb6a65000)
libssl.so.4 => /usr/lib/libssl.so.4 (0xb6a16000)
libbz2.so.1.0 => /lib/i386-linux-gnu/libbz2.so.1.0 (0xb6a05000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb69ff000)
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb69f6000)
/lib/ld-linux.so.2 (0xb77be000)
shager 2012-06-06
  • 打赏
  • 举报
回复
不知道是不是和共享库的生成方式有关,因为链接libIce.so.34和libhsfutusdk.so是用的同样的方式,只不过用ldd现实的时候,查不到的那些共享库都没有形如 libXXX=>/path/libXXX的格式,只有单独一个路径。
shager 2012-06-06
  • 打赏
  • 举报
回复
用的是codeblocks和gcc,具体的编译选项看不出来。
justkk 2012-06-06
  • 打赏
  • 举报
回复
那你是如何编译的?命令行是怎样的
shager 2012-06-06
  • 打赏
  • 举报
回复
也没有用,用readelf -d查看,这些找不到的依赖库是带有路径的,而其他的一些标准库,就是不带路径的,是不是和这个有关系? 如果和这个有关,那又该如何解决,谢谢了

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


引用 5 楼 的回复:
LIBPATH 这个环境变量是否有用?
shager 2012-06-06
  • 打赏
  • 举报
回复
也没有用,用readelf -d查看,这些找不到的依赖库是带有路径的,而其他的一些标准库,就是不带路径的,是不是和这个有关系? 如果和这个有关,那又该如何解决,谢谢了

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

[Quote=引用 5 楼 的回复:]
LIBPATH 这个环境变量是否有用?
[/Quote]
qq120848369 2012-06-05
  • 打赏
  • 举报
回复
时隔数月之后,楼主再次提出同样的问题,用意何在?

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧