Je suis en train de construire une bibliothèque d'objets partagés sur Debianla construction d'une bibliothèque d'objets partagés: ldd ne montre pas le nom spécifié
cat /etc/issue
Debian GNU/Linux 9 \n \l
Je construis la bibliothèque et de l'objet comme normal (wrap.c
sert de wrapper pour créer tous les fichiers objets)
gcc -c -fPIC -W -Wall -O2 -funroll-loops wrap.c
gcc -shared -Wl,-soname,libtest.so -o libtest.so *.o
mv libtest.so /usr/local/lib/ && mv test-header.h /usr/local/include/
je crée alors un test.c
pour tirer dans la bibliothèque et compilera comme suit:
gcc test.c -ltest
Cependant, l'exécution du programme ./a.out
renvoie l'erreur suivante:
./a.out: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory
le .so
Inspecter, je vois:
$ ldd /path/to/libtest.so
linux-vdso.so.1 (0x00007ffdb71c5000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1c22fba000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1c23560000)
Je ne vois même pas libtest.so => none
, dont au moins raconterait moi, il ne peut pas trouver la bibliothèque.
Je ne suis pas vraiment sûr de ce qui se passe ici.
Je dois créer avec succès un .dylib
sur macOS
avec le même processus (avec gcc -dynamiclib -o libtest.dylib *.o
), et je peux appeler avec succès la bibliothèque dans un exécutable. Je ne suis pas sûr de ce qui est différent sur Debian.
Je vous recommande de définir [rpath] (https://en.wikipedia.org/wiki/Rpath) au moment de la liaison avec '-Wl, -rpath,/usr/local/lib' –
@Mike Kinghan Doh ....! J'ai complètement pété le cerveau que j'utilisais ldd sur la bibliothèque plutôt que sur l'exécutable. Pour une raison quelconque, cela m'a complètement égaré. Appréciez la perspicacité! – floopy