2017-10-11 61 views
0

ldd无法找到一个dll,它出现在rpath定义中。找到一些其他库(检查/./../lib/*)尽管设置了rpath,但找不到一个dll

这里是ldd的输出(我们可以看到2个DLL在../lib中找到,但没有找到libexpat.so.0:

根@ hyperstream:/ DT /本地/ ADE-trunk4 /集结ADE-桌面 - 缺省/仓# LDD ./ade_admin Linux的vdso.so.1 =>(0x00007ffeb9796000) libadeversion.so = > /DT/local/ADE-trunk4/build-ADE-Desktop-Default/bin/./../lib/libadeversion.so (0x00007f31abaef000)libuuid.so.1 => /lib/x86_64-linux- gnu/libuuid.so.1(0x00007f31ab8ca000) libpthread.so.0 =>/lib/x86_64-linux-gnu/libpthr ead.so.0 (0x00007f31ab6ac000)libaprutil-1.so.0 => /DT/local/ADE-trunk4/build-ADE-Desktop-Default/bin/./../lib/libaprutil-1。 so.0 (0x00007f31ab58c000)libapr-1.so.0 => /DT/local/ADE-trunk4/build-ADE-Desktop-Default/bin/./../lib/libapr-1.so 0.0 (0x00007f31ab460000)libavahi-client.so.3 => /usr/lib/x86_64-linux-gnu/libavahi-client.so.3(0x00007f31ab24d000) libavahi-common.so.3 => /usr/lib/x86_64-linux-gnu/libavahi-common.so.3(0x00007f31ab041000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2(0x00007f31aae3d000) libstdC++。so。 6 =>/usr/lib/x86_64-linux-g nu/libstdC++。so.6 (0x00007f31aaab5000)libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f31aa7ac000)libgcc_s.so.1 => /lib/x86_64-linux -gnu/libgcc_s.so.1(0x00007f31aa595000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6(0x00007f31aa1cc000) /lib64/ld-linux-x86-64.so。 2(0x0000560d30a76000)libexpat.so.0 => 未找到 librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f31a9fc4000)[...]

root @ hyperstream:/ DT/local/ADE-trunk4/build-ADE-Desktop-Default/bin# file ../lib/libexpat.so.0 ../lib/libexpat.so.0:ELF 64位LSB分享 对象,X86-64,版本1(SYSV),动态链接, BuildID [SHA1] = 762de704943d03033d01a9725216d6b05d0740f5,不剥离

这里将rpath:

根@ hyperstream:/ DT /本地/ ADE-trunk4/build-ADE-Desktop-Default/bin# readelf -d ade_admin | grep的 'R. * PATH' 16:0x000000000000001d(RUNPATH) 库运行路径:[$ {ORIGIN} /../ lib中]

现在凶手的事实:这是铿锵3.8的作品,但失败GCC 6.3(Ubuntu的16.10)

显然添加LD_LIBRARY_PATH = ../lib目录使其再次工作,但rpath中的目标是避免将其设置

根@ hyperstream:/ DT /本地/ ADE-trunk4/build-ADE-Desktop-Default/bin# export LD_LIB RARY_PATH = ../ lib中 根@ hyperstream:/ DT /本地/ ADE-trunk4 /集结ADE-桌面 - 缺省/仓# LDD ./ade_admin Linux的vdso.so.1 =>(0x00007ffea23b6000) libadeversion.so => ../lib/libadeversion.so(0x00007f78c6474000) libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f78c624f000)libpthread.so.0 => /lib/x86_64- linux-gnu/libpthread.so.0(0x00007f78c6031000) libaprutil-1.so.0 => ../lib/libaprutil-1.so.0(0x00007f78c5f11000) libapr-1.so.0 => ../ lib/libapr-1.so.0(0x00007f78c5de5000) libavahi-client.so.3 => /usr/lib/x86_64-linux-gnu/libavahi-client.so.3(0x00007f78c5bd2000) libavahi-common.so .3 => /usr/lib/x86_64-linux-gnu/libavahi-common.so.3(0x00007f78c59c6000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2(0x00007f78c57c2000) libstdC++。 so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f78c543a000)libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f78c5131000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1(0x00007f78c4f1a000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6(0x00007f78c4b51000) /lib64/ld-linux-x86-64.so.2(0x0000559fdceab000)libexpat.so.0 => 。 ./lib/libexpat.so.0(0x00007f78c492a000)

任何想法?

问候

洛朗

回答

0

我只是找到了解释:铛放在小精灵二进制文件的[需要的]部分中的所有库(甚至图书馆没有明确地由包括我自己,而是通过引用[需要的]

readelf -d my_prog 

Dynamic section at offset 0x9cb548 contains 46 entries: 
    Tag  Type       Name/Value 
0x0000000000000001 (NEEDED)    Shared library: [libadeversion.so] 
0x0000000000000001 (NEEDED)    Shared library: [libuuid.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [libsqlite3.so] 
0x0000000000000001 (NEEDED)    Shared library: [libpthread.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libaprutil-1.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libapr-1.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libavahi-client.so.3] 
0x0000000000000001 (NEEDED)    Shared library: [libavahi-common.so.3] 
0x0000000000000001 (NEEDED)    Shared library: [libdl.so.2] 
0x0000000000000001 (NEEDED)    Shared library: [libaio.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [librt.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [lib_adm64.so] 
0x0000000000000001 (NEEDED)    Shared library: [lib_dict64.so] 
0x0000000000000001 (NEEDED)    Shared library: [lib_rdm64.so] 
0x0000000000000001 (NEEDED)    Shared library: [lib_dbr64.so] 
0x0000000000000001 (NEEDED)    Shared library: [libstdc++.so.6] 
0x0000000000000001 (NEEDED)    Shared library: [libm.so.6] 
0x0000000000000001 (NEEDED)    Shared library: [libgcc_s.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [libc.so.6] 
0x000000000000001d (RUNPATH)   Library runpath: [${ORIGIN}/../lib/:$ORIGIN/../lib/:../lib/] 

从铛:我包括从GCC

例的库的部分

readelf -d my_prog 

Dynamic section at offset 0xa7bae8 contains 54 entries: 
    Tag  Type       Name/Value 
0x0000000000000001 (NEEDED)    Shared library: [libadeversion.so] 
0x0000000000000001 (NEEDED)    Shared library: [libuuid.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [libsqlite3.so] 
0x0000000000000001 (NEEDED)    Shared library: [libpthread.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libaprutil-1.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libexpat.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libapr-1.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libavahi-client.so.3] 
0x0000000000000001 (NEEDED)    Shared library: [libavahi-common.so.3] 
0x0000000000000001 (NEEDED)    Shared library: [libdl.so.2] 
0x0000000000000001 (NEEDED)    Shared library: [libaio.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [libcrypt.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [librt.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [lib_adm64.so] 
0x0000000000000001 (NEEDED)    Shared library: [lib_dict64.so] 
0x0000000000000001 (NEEDED)    Shared library: [lib_rdm64.so] 
0x0000000000000001 (NEEDED)    Shared library: [lib_rpc64.so] 
0x0000000000000001 (NEEDED)    Shared library: [lib_sql64.so] 
0x0000000000000001 (NEEDED)    Shared library: [lib_rdbc64.so] 
0x0000000000000001 (NEEDED)    Shared library: [lib_rm64.so] 
0x0000000000000001 (NEEDED)    Shared library: [lib_ncp64.so] 
0x0000000000000001 (NEEDED)    Shared library: [lib_cmp64.so] 
0x0000000000000001 (NEEDED)    Shared library: [lib_repfltr64.so] 
0x0000000000000001 (NEEDED)    Shared library: [lib_expat64.so] 
0x0000000000000001 (NEEDED)    Shared library: [lib_cncp64.so] 
0x0000000000000001 (NEEDED)    Shared library: [lib_dbr64.so] 
0x0000000000000001 (NEEDED)    Shared library: [libstdc++.so.6] 
0x0000000000000001 (NEEDED)    Shared library: [libm.so.6] 
0x0000000000000001 (NEEDED)    Shared library: [libgcc_s.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [libc.so.6] 
0x000000000000001d (RUNPATH)   Library runpath: [${ORIGIN}/../lib/:$ORIGIN/../lib/:../lib/] 

而且一个DLL包括缺少一个的libexpat:

readelf -d ../lib/libaprutil-1.so.0 

Dynamic section at offset 0x1e698 contains 29 entries: 
    Tag  Type       Name/Value 
0x0000000000000001 (NEEDED)    Shared library: **[libexpat.so.0]** 
0x0000000000000001 (NEEDED)    Shared library: [libapr-1.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libuuid.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [librt.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [libcrypt.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [libpthread.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libdl.so.2] 
0x0000000000000001 (NEEDED)    Shared library: [libc.so.6] 
0x000000000000000e (SONAME)    Library soname: [libaprutil-1.so.0] 

但RUNPATH仅由二进制不是由DLL(即可以拥有自己的是太RUNPATH)。

2解决方案: - 在libaprutil-1.so.0中添加一个RUNPATH以强制从“。”包含库。 - 明确添加我构建中的所有缺少的dll

希望它有帮助

相关问题