2017-10-11 3 views
0

ldd ne parvient pas à trouver une DLL, présente dans la définition de rpath. Quelques autres bibliothèques sont trouvées (vérifier /./../lib/*)Malgré la définition de rpath, une DLL n'est pas trouvée

Voici la sortie de ldd (on peut voir que 2 dll se trouvent dans ../lib, mais pas libexpat.so.0:

root @ HyperStream:/DT/local/ADE-trunk4/build-ADE-Desktop-Default/bin # linux-vdso.so.1 ldd ./ade_admin => (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 par défaut/bin/./../lib/libaprutil-1. donc 0 (0x00007f31ab58c000) libapr-1.so.0 => /DT/local/ADE-trunk4/build-ADE-Desktop par défaut/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++. 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 => not found librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f31a9fc4000) [...]

root @ hyperstream:/DT/local/ADE-trunk4/build-ADE-Desktop par défaut/bin # fichier ../lib/libexpat.so.0 ../lib/libexpat.so.0: ELF 64-bit LSB partagéobjet, x86-64, version 1 (SYSV), lié dynamiquement, BuildID [SHA1] = 762de704943d03033d01a9725216d6b05d0740f5, pas dépouillé

Voici le rpath:

root @ HyperStream:/DT/local/ADE-trunk4/build-ADE-Desktop par défaut/bin # read -d ade_admin | 'R. * CHEMIN grep 16: 0x000000000000001d (RUNPATH) RUNPATH Library: [$ {} ORIGIN /../ lib]

Maintenant, le fait de tueur: Il est fonctionne avec clang 3.8, mais ne parviennent pas à gcc 6.3 (ubuntu 16.10)

il est évident que l'ajout d'un LD_LIBRARY_PATH = ../lib faire cela fonctionne à nouveau, mais le but de rpath était d'éviter de le mettre

root @ HyperStream:/DT/local/ADE-trunk4/build-ADE-Desktop par défaut/bin # export LD_LIB RARY_PATH = ../ lib root @ hyperstream:/DT/local/ADE-trunk4/build-ADE-Desktop-par défaut/bin # 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)

Toute idée?

Cordialement

Laurent

Répondre

0

Je viens de trouver l'explication: clang mettre dans la [NÉCESSAIRE] du binaire elfe toutes les bibliothèques (même les bibliothèques non explicitement inclus par moi-même, mais référencés par le [NÉCESSAIRE] partie de la bibliothèque que je inclus

exemple de gcc:

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/] 

de clang:

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/] 

Et une dll comprennent le manque un 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] 

mais RUNPATH est utilisé uniquement par le binaire non par le dll (qui peut avoir est propre RUNPATH aussi).

2 solutions: - ajouter un RUNPATH dans libaprutil-1.so.0 pour forcer à inclure la bibliothèque de "." - ajouter explicitement tous dll manquants dans ma construction

Espérons que cela aide