Comment spécifier non partagé par défaut-chemin de la bibliothèque dans GCC Linux? Obtiens le message “erreur lors du chargement des bibliothèques partagées” lors de l'exécution de
Il y a un ordinateur portable sur lequel je n'ai pas les privilèges de root.
sur la machine, j'ai une bibliothèque installé à l'aide de configure --prefix=$HOME/.usr
.
après, j'ai reçu ces fichiers dans ~/.usr/lib
:
libXX.so.16.0.0
libXX.so.16
libXX.so
libXX.la
libXX.a
quand je compile un programme qui appelle une fonction fournie par la bibliothèque avec cette commande :
gcc XXX.c -o xxx.out -L$HOME/.usr/lib -lXX
xxx.a été généré sans avertissement, mais quand je le lance en erreur, comme cela a été lancé:
./xxx.out: error while loading shared libraries: libXX.so.16: cannot open shared object file: No such file or directory
, si libXX.so.16
y réside.
mon idée-moins l'hypothèse est que ~/.usr/lib
n'était pas recherchés lors de xxx.est invoquée.
mais ce que je peux faire pour spécifier le chemin d'accès .ainsi , dans l'ordre que xxx.peut y chercher .si le fichier?
Un plus est quand je nourris -static
à gcc, une autre erreur se produit comme ceci:
undefined reference to `function_proviced_by_the_very_librar'
Il semble .so
n'a pas d'importance, même si -L
et -l
sont donnés à gcc.
que dois-je faire pour construire un utilisable exe avec cette bibliothèque?
Pour les autres personnes qui ont la même question que je n'ai
J'ai trouvé un article utile à tldp à ce sujet.
Il introduit statique/shared/dynamique chargé de la bibliothèque, ainsi que des exemples de code pour les utiliser.
Vous devez vous connecter pour publier un commentaire.
Il existe deux façons de réaliser que:
-rpath
linker option:gcc XXX.c -o xxx.out -L$HOME/.usr/lib -lXX -Wl,-rpath=/home/user/.usr/lib
Utilisation
LD_LIBRARY_PATH
variable d'environnement - mettre cette ligne dans votre~/.bashrc
fichier:export LD_LIBRARY_PATH=/home/user/.usr/lib
Ça va marcher, même pour un pré-généré les fichiers binaires, de sorte que vous pouvez par exemple télécharger des packages à partir de la debian.org, décompresser les fichiers binaires et les bibliothèques partagées dans votre répertoire home, et de les lancer sans recompiler.
Pour un test rapide, vous pouvez également le faire (en bash): au moins
qui a l'avantage de ne pas changer votre chemin de la bibliothèque pour tout le reste.
Devrait-il être
LIBRARY_PATH
au lieu deLD_LIBRARY_PATH
.gcc vérifie
LIBRARY_PATH
qui peut être vu avec-v
optionLD_LIBRARY_PATH
n'est pas pour GCC, c'est pour la bibliothèque d'exécution de chargeur (/lib/ld-linux.donc.2, etc). GCC ne peut pas être installé à tous pourLD_LIBRARY_PATH
de travail.