2017-10-11 5 views
0

ldd kann keine DLL finden, die in der rpath Definition vorhanden ist. Einige andere Bibliotheken werden gefunden (check /./../lib/*)Obwohl rpath eingestellt ist, wird eine DLL nicht gefunden

Hier die Ausgabe von ldd (wir können sehen, dass 2 dll in ../lib gefunden werden, aber nicht libexpat.so.0:

root @ Hyper:/DT/local/ADE-trunk4/build-ADE-desktop-Standard/bin # 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/lokal/ADE-trunk4/build-ADE-Desktop-Standard/bin/./../lib/libaprutil-1. so.0 (0x00007f31ab58c000) libapr-1.so.0 => /DT/lokal/ADE-trunk4/build-ADE-Desktop-Standard/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 => nicht librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f31a9fc4000) [...] gefunden

root @ hyperstream:/DT/lokal/ADE-trunk4/build-ADE-Desktop-Standard/bin # Datei ../lib/libexpat.so.0 ../lib/libexpat.so.0: ELF 64-Bit LSB geteilt Objekt, x86-64, Version 1 (SYSV), dynamisch gelinkt, BuildID [SHA1] = 762de704943d03033d01a9725216d6b05d0740f5, nicht gestrippt

Hier die rpath:

root @ Hyper:/DT/local/ADE-trunk4/build-ADE-Desktop-Standard/bin # readelf -d ade_admin | grep 'R. * PATH' 16: 0x000000000000001d (RUNPATH) Bibliothek RUNPATH: [$ {} ORIGIN /../ lib]

Nun ist die Killer der Tat: Es ist funktioniert mit Klirren 3.8, aber nicht mit 6.3 gcc (ubuntu 16.10)

Offensichtlich ein LD_LIBRARY_PATH Hinzufügen = ../lib machen es funktioniert wieder, aber das Ziel von rpath war zu setzen zu vermeiden es

root @ Hyper:/DT/local/ADE-trunk4/build-ADE-Desktop-Standard/bin # Export LD_LIB RARY_PATH = ../ lib root @ hyperstream:/DT/lokal/ADE-trunk4/build-ADE-Desktop-Standard/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)

Jede Idee?

Grüße

Laurent

Antwort

0

finde ich nur die Erklärung: Klirren setzen in der [ERFORDERLICH] -Abschnitt der elf binären alle Bibliotheken (auch Bibliotheken nicht explizit von mir enthalten, aber durch die referenzierte [erforderlich] Sektion der Bibliothek, die ich

Beispiel aus gcc sind:

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

von Klirren:

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

Und eine DLL gehören die fehlende ein 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] 

aber RUNPATH nur durch die binäre nicht durch die DLL verwendet wird (das kann, ist selbst RUNPATH haben).

2 Lösungen: - fügen Sie einen RUNPATH in libaprutil-1.so.0 hinzu, um zu erzwingen, Bibliothek von "." - fügen Sie explizit alle fehlenden dll in meinem Build

Ich hoffe, es hilft

Verwandte Themen