J'installe un programme sur un serveur en tant qu'utilisateur non root. Plus précisément, il s'agit de tmux 1.5, mais cela devrait s'appliquer à tous les programmes installés localement à mon avis (je mentionne le nom du programme au cas où ce problème ne serait pas ma propre erreur).
Le programme nécessite que j'installe certaines bibliothèques dépendantes (par exemple libevent et ncurses). Donc, je les ai installés tous les deux localement car je n'ai pas d'accès root
cd $HOME/library/installation/folder
DIR=$HOME/local
./configure --prefix=$DIR
#... make ... make install
Maintenant, pour installer le programme, je devais également inclure les packages de bibliothèque:
cd $HOME/program/installation/folder
./configure --prefix=$DIR CFLAGS="-I$DIR/include" LDFLAGS="-L$DIR/lib"
#... make ... make install
Ok, donc cela installe le programme sans problème dans $ HOME / local / bin, mais si j'exécute l'exécutable: $ HOME / local / bin / tmux, j'obtiens l'erreur suivante:
tmux: erreur lors du chargement des bibliothèques partagées: libevent-2.0.so.5: impossible d'ouvrir le fichier d'objet partagé: aucun fichier ou répertoire de ce type
Il me semble que le programme ne trouve pas les bibliothèques souhaitées, mais le fichier libevent-2.0.so.5 existe bel et bien dans $ HOME / local / lib comme spécifié dans les options de configuration. Je me demande comment je peux faire en sorte que le programme reconnaisse la bibliothèque installée pour fonctionner. J'ai essayé de mettre des liens symboliques dans $ HOME / lib, $ HOME / bin et $ HOME / local / bin, mais rien de tout cela n'a fonctionné. Toutes les idées et suggestions seraient grandement appréciées
la source
-R $DIR/lib
àCFLAGS
est en constructiontmux
(et nonlibevent
). Cela ne m'a pas aidé - il y a eu une dernière erreur de gcc disant qu'il ne peut pas reconnaître-R
(aussi, j'ai essayé sans l'espace entre-R
et$DIR
). ./configure --disable-shared Cela a fonctionné, la mise à jour aLD_LIBRARY_PATH
également fonctionné. J'ai fini parlibevent
refaire avec l'--disable-shared
option ci-dessus .Réponses:
Essayez de reconstruire libevent en utilisant
Je pense que cela résoudra votre problème car la bibliothèque sera liée lors de la construction du binaire et n'a pas besoin d'être recherchée lors de l'exécution.
Alternativement, si vous avez besoin d'un libevent lié dynamiquement, vous pouvez ajouter le répertoire contenant libevent-2.0.so.5 à votre variable d'environnement LD_LIBRARY_PATH:
la source
Vous pouvez également définir le RPATH, qui code le correctif de recherche de bibliothèque dans le binaire lui-même .
Ajoutez simplement
-R $DIR/lib
àCFLAGS
.la source
Pas de chance avec les autres, mais cela a fonctionné pour moi, d' ici :
la source
J'ai posé une question similaire , assez intéressante aussi sur la construction
tmux
de toutes choses (bien que je sois toujours certain que cela concerne à peu près n'importe quelle situation où GNUconfigure
etmake
sont utilisés ensemble.Je crois qu'une approche plus propre consiste à utiliser le soi-disant "rpath" - le chemin de recherche de bibliothèque intégré dans le binaire. Le
-rpath
commutateur d'au moins l'éditeur de liens GNUld
spécifie le chemin.La ligne de commande de construction se présenterait alors comme suit:
Pas vraiment primordial ici, mais
PKG_CONFIG_PATH
ci-dessus est simplement la façon recommandée de faire ce que les gens réalisent autrement envoyer manuellement-L/path/to/libevent/lib -I/path/to/libevent/include
au./configure
script. Lorsque vous générezlibevent
, il installe ses propres fichiers de configuration pourpkg-config
(qui est utilisé par./configure
). Vous devriez l' utiliser, parce quelibevent
certainement sait ce qui passe doit être utilisé lors de la construction contre elle.Quoi qu'il en soit, dans certaines situations,
-rpath
c'est une approche plus propre pour résoudre le problème.LD_LIBRARY_PATH
Cependant, les solutions basées sur vous permettent de jongler avec la bibliothèque utilisée par votre binaire construit lors de l'exécution, ce qui est parfois souhaitable. Mais si vous voulez simplement construire avec une bibliothèque particulière que vous avez placée quelque part dans votre dossier de départ, je pense que les-rpath
solutions basées sur ce sont à considérer comme une réponse canonique.Ce qui est étrange, c'est pourquoi
tmux
les propres scripts de construction n'infèrent pas ce chemin à partir du chemin de recherche de bibliothèque pendant la construction. Peut-être qu'ils n'ont pas besoin et ne devraient pas, je ne sais pas. Est-ce une coïncidence que cela soit arrivé à nous qui construisonstmux
?la source