erreur lors du chargement des bibliothèques partagées
Merci les gars de répondre à mon problème précédent sur undefined reference de fonction. Comme vous l'avez suggéré, la raison sous le problème n'est pas de relier les bibliothèques. Maintenant, j'ai généré le fichier exécutable avec: (la version de g++ et gcc est 4.4.5. J'utilise Ubuntu 10.10.)
g++ -o ex_addinst ./ex_addinst.o -L/home/li/work/tools/lindo/lindoapi/bin/linux64 -m64 -llindo64 -lmosek64 -lconsub3 -lc -ldl -lm -lguide -lpthread -lsvml -limf -lirc
Mais il vient un autre problème, lorsque je lance le fichier exécutable avec
./ex_addinst
erreurs apparaissent: (je ne suis pas sûr que je devrais commencer un nouveau problème ou pas pour le moment....)
./ex_addinst: error while loading shared libraries: liblindo64.so.6.0: cannot open shared object file: No such file or directory
Mais liblindo64..6.0 existe dans le dossier de la lib ~/lindoapi/bin/linux64 qui contient les fichiers suivants:
libconsub3.so libirc.so liblindojni.so libmosek64.so.5.0 lindo.par
libguide.so liblindo64.so liblindojni.so.6.0.3 libsvml.so placeholder
libimf.so liblindo64.so.6.0 libmosek64.so lindoapivars.sh runlindo
J'ai créé un lien symbolique entre liblindo..6.0 et liblindo.donc:
ln -sf liblindo64.so.6.0 liblindo64.so
Il est '-llindo64' est la commande g++, donc j'ai pensé liblindo64..6.0 doit avoir été lié.
J'ai essayé de changer -L-Llib, mais cela n'aide pas.
Quelqu'un peut me dire quel est le problème ici? Merci!
OriginalL'auteur ulyssis2 | 2011-09-17
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'avoir le répertoire où le
.so
fichiers de vivre en exécution de l'éditeur de liens de recherche de chemin.Vous pouvez le faire en modifiant le
LD_LIBRARY_PATH
variable d'environnement comme ceci:avant de commencer votre exécutable.
Est-il
HOME
ou$HOME
dans cette chaîne?c'est $HOME, désolé, mon erreur de frappe. Comme il est contenu dans lindoapivars.sh je pense que ce n'est pas le bon endroit pour changer cette variable.
Puis-je faire cela de façon permanente au lieu de par commande?
OriginalL'auteur Mat
Si vous ne voulez pas installer les bibliothèques actuellement sous
/home/li/work/tools/lindo/lindoapi/bin/linux64
dans un répertoire système (/usr/lib
,/usr/local/lib
, etc.), ensuite, il est préférable de simplement un lien vers l'application de telle sorte que le tout fonctionne(TM):C'est préférable de toujours avoir à mettre en
LD_LIBRARY_PATH
, parce queLD_LIBRARY_PATH
) et,LD_LIBRARY_PATH
pourlibc.so.6
, etc.)La raison de votre
LD_LIBRARY_PATH
réglage ne fonctionne pas (commentaire de Mat de réponse), c'est que vous avez utiliséHOME
où/home
était destiné.il fonctionne...bizarre...je suis tellement heureuse, merci pour votre aide! @Mat
OriginalL'auteur Employed Russian
de la somme de la solution:
- Je ajouter le chemin d'accès à ~./bashrc avec:
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$HOME/.../lindoapi/bin/linux64
(après la génération .o fichier)lien de l'objectif du fichier:
g++ -o ex_addinst ./ex_addinst.o -L/home/.../lindoapi/bin/linux64 -m64 -llindo64 -lmosek64 -lconsub3 -lc -ldl -lm -lguide -lpthread -lsvml -lim-lirc
OriginalL'auteur ulyssis2