Clang de l'éditeur de liens ne regarde pas dans LD_LIBRARY_PATH
Je suis en train de construire et de lien C++, cmake projet avec clang (3.0). Ce projet, des liens vers plusieurs bibliothèques qui sont installés dans un répertoire personnalisé /mon/dir/. Ce répertoire est inclus dans le LD_LIBRARY_PATH et LIBRARY_PATH variables d'environnement. Projet renforce les liens et fine avec g++.
Le lien de commande généré et exécuté par cmake se présente comme suit:
/usr/bin/clang++ -O3 stuff.cpp.o -o stuff -rdynamic -lmylib
ld puis se plaint avec le message suivant:
/usr/bin/ld: cannot find -lmylib
Commande le lien ci-dessus fonctionne très bien quand je l'ajouter manuellement -L/my/dir/
. Est-il un moyen de liaison sans préciser la -L
drapeau?
LD_LIBRARY_PATH
est pour le chargement de bibliothèques au démarrage, pas pour la résolution de lien de dépendance. Peut-être que vous souhaitez utiliser LDFLAGS
?Intéressant. J'utilise g++ et clang++ de façon interchangeable avec CMake, mais jamais eu un problème similaire. J'utilise simplement le
link_directories()
macro pour définir le chemin de la bibliothèque.
OriginalL'auteur Régis B. | 2012-09-25
Vous devez vous connecter pour publier un commentaire.
La
$LD_LIBRARY_PATH
variable d'environnement (et ses différentes variantes sur d'autres plateformes UNIX) est utilisé à runtime, pas moment de la liaison, à trouver les bibliothèques.À l'aide de
-L
est la bonne approche et ne peut pas être évitée.Remarque: Une meilleure approche sous Linux (vous ne précisez pas votre plate-forme, donc je suppose) est de configurer correctement un fichier dans
/etc/ld.so.conf.d/
et d'éviter l'utilisation$LD_LIBRARY_PATH
tout à fait.Intéressant, je n'ai jamais utilisé
LIBRARY_PATH
. Quel est le problème avec l'aide de-L
?L'option-L exige un changement dans la cmake configuration, qui est partagée avec mes collègues. Je vais maintenant essayer d'aller le /etc/ld..conf.d/.
Le
/etc/ld.so.conf.d/
est exécution seulement ainsi; je l'ai mentionné car c'est une meilleure approche que l'aide$LD_LIBRARY_PATH
; il n'affecte pas votre build. Pourquoi ne pas ajouter une variable personnalisée à l'cmake config que chacun de vous pouvez définir pour spécifier d'autres bibliothèques durant l'édition de liens (si ce n'est pas définie, il ne fait rien et n'affectera pas vos collègues)OriginalL'auteur trojanfoe