-lengine cherche libengine.so, pas engine.so.
"without the lib prefix" parce qu'il est rajouté automatiquement.
2.8.x, c'était il y a longtemps, mais à ma connaissance, GCC sous GNU/Linux a toujours cherché libmalib.
Ça dépend certainement de la plateforme.
Farewell Le 07/06/2015 à 17:16Edité par Farewell le 08/06/2015 à 23:05 Ok, merci beaucoup.
Et comment dire à mon exécutable que la lib dont il a besoin est dans le même répertoire que lui ?
Je suis obligé d'exécuter ldconfig (donc en root), pour spécifier mon répertoire courant ?
Ou alors je dois forcément copier le .so dans /usr/lib ? J'aimerais pas non plus faire des manipulations répétées dans ce répetoire...
Ah, et au passage, comment me permet-on de lancer l'exécution d'une librairie, et comment fait-elle pour segfaulter, vu qu'elle n'est pas censée avoir d'entry point ?folco@Foch:/mnt/Data/prog/ng/ngedit/Debug-unix$ ls
editor libngine.so src_main.cpp.o src_main.cpp.o.d
folco@Foch:/mnt/Data/prog/ng/ngedit/Debug-unix$ ./libngine.so
Segmentation fault
??
LD_LIBRARY_PATH=`pwd` ./editor
Pour nous chez Fedora, c'est plutôt rpath (l'alternative) qui est "evil".
Les bibliothèques ne sont pas réellement exécutables, c'est normal. Elles portent le bit exécutable (ce qui fait que le noyau essaie de les exécuter et provoque la faute de segmentation) d'un (du côté de la chaîne d'outils) pour des raisons historiques et de deux (dans les distributions RPM) parce que les scripts qui extraient les informations de débogage pour les paquetages -debuginfo n'opèrent que sur des fichiers marqués exécutables. Mais Debian et dérivées retirent le bit exécutable des bibliothèques exactement pour la raison que tu décris. (Par ici, on est de l'avis que si tu essaies d'exécuter une bibliothèque, c'est ton problème.)
Laisse plutôt Debian s'occuper de ça. Pratiquement toutes les autres distributions (qui ne sont pas dérivées de Debian) utilisent +x, et sous Fedora, les bibliothèques doivent être en +x (pour la raison déjà décrite: c'est nécessaire pour les RPMs -debuginfo).