Comment imprimer la ld(linker) chemin de recherche
Quel est le moyen d'imprimer les chemins de recherche dans regardé par les ld dans l'ordre qu'il recherche.
Vous devez vous connecter pour publier un commentaire.
Quel est le moyen d'imprimer les chemins de recherche dans regardé par les ld dans l'ordre qu'il recherche.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire en exécutant la commande suivante:
gcc passe un supplément de quelques -L chemins d'accès à l'éditeur de liens, qui vous pouvez de la liste avec la commande suivante:
Les réponses, ce qui suggère d'utiliser ld.donc.conf et ldconfig ne sont pas correctes car elles se réfèrent à l'chemins recherchés par le moteur d'exécution l'éditeur de liens dynamiques (c'est à dire chaque fois qu'un programme est exécuté), ce qui n'est pas le même que le chemin recherché par ld (c'est à dire à chaque fois qu'un programme est lié).
/usr/local/..
qui provoque une bibliothèque manquante erreur, et la liaison échoue. - Je renommer/usr/local
à chaque fois à exclure que le chemin de recherche. Est-il un moyen simple d'exclure ou de remplacer/usr/local
chemin?ld
s chemin de recherche. Par exemple, parfois, je dois compiler un code source à partir demakefile
ou de la génération de makefile à partir deconfigure
de script ou deCMakeLists.txt
ou même les plus compliqués tels quevala
ousrt
. Il est difficile pour moi de modifierld
chemin de recherche dans de tels casSur Linux, vous pouvez utiliser
ldconfig
, qui maintient la ld.afin de configuration et de mise en cache, pour imprimer les répertoires de recherche parld.so
avecldconfig -v
imprime les répertoires de recherche par l'éditeur de liens (sans onglet) et les bibliothèques partagées trouvé dans ces répertoires (avec un onglet); lagrep
obtient les répertoires. Sur ma machine, cette ligne afficheLes premiers sentiers, sans
hwcap
dans la ligne, sont soit intégré ou lire à partir de /etc/ld.donc.conf.L'éditeur de liens pouvez rechercher d'autres répertoires sous la base de la bibliothèque de recherche de chemin, avec des noms comme
sse2
correspondant à d'autres CPU capacités.Ces chemins, avec
hwcap
en ligne, peut contenir d'autres bibliothèques sur mesure pour ces CPU capacités.Une dernière remarque: l'utilisation de
-p
au lieu de-v
au-dessus de recherches de lald.so
cache à la place.export LD_LIBRARY_PATH=/some/other/dir
, il n'affectera pas la sortie de cette commande?! Il semble qu'il ne fonctionne pas à 100%?LD_LIBRARY_PATH
par l'activation du débogage. E. g.LD_DEBUG=libs /lib/ld-linux.so --list cat
(vous pouvez utiliser n'importe quel exécutable, j'ai priscat
que la première chose que je pouvais penser). Peut-être vaut grepping pour "search path
". Notez que si vous avez un/etc/ld.so.cache
qui correspond à toutes les libs nécessaires, vous n'aurez pas la chance de voir le système intégré de recherche, de chemin, car il ne sera pas loin.gcc
chemin de recherche de la même chose avec ces?ldconfig -v
sur FreeBSD, il sera définitivement supprimer tous les répertoires configurés. Utilisationldconfig -r
plutôt que sur FreeBSD.Je ne suis pas sûr qu'il y a une option pour tout simplement l'impression de la totalité de recherche efficaces chemin.
Mais: le chemin de recherche est composé de répertoires spécifiés par
-L
options sur la ligne de commande, suivi par les répertoires ajoutés au chemin de recherche parSEARCH_DIR("...")
directives dans le linker script(s). De sorte que vous pouvez travailler si vous pouvez voir à la fois de ceux qui vous pouvez faire comme suit:Si vous êtes en invoquant
ld
directement:-L
options sont tout ce que vous avez dit qu'ils sont.--verbose
option. Recherchez lesSEARCH_DIR("...")
directives, habituellement près de la haut de la sortie. (Notez que ce ne sont pas nécessairement les mêmes pour chaque invocation deld
-- l'éditeur de liens a un certain nombre de différents intégré par défaut de l'éditeur de liens des scripts, et choisit entre eux en fonction de diverses autres options du linker.)Si vous êtes à la liaison par
gcc
:-v
option pourgcc
afin qu'il vous montre comment il appelle l'éditeur de liens. En fait, il n'a normalement pas invoquerld
directement, mais indirectement, par l'intermédiaire d'un outil appelécollect2
(qui vit dans l'un de ses annuaires interne), qui à son tour appelleld
. Qui va vous montrer ce que-L
options sont utilisées.-Wl,--verbose
à lagcc
options pour le faire passer--verbose
grâce à l'éditeur de liens, pour voir le linker script comme décrit ci-dessus.-T script
mon script complètement remplacé ld par défaut du script et seulement regardé où je l'ai fait.Le plus compatible avec les commande que j'ai trouvé pour gcc et clang sur Linux (merci à armando.sano):
si vous donnez
-m32
, il sera la sortie correcte de la bibliothèque de répertoires.Exemples sur ma machine:
pour
g++ -m64
:pour
g++ -m32
:La question est balisé Linux, mais peut-être que cela fonctionne aussi bien sous Linux?
Sous Mac OS X, cela s'imprime:
La
-Xlinker
option degcc
juste au-dessus de passe-v
àld
. Cependant:ne pas imprimer sur le chemin de recherche.
-Lpath
. Donc @Raphaël Londeix réponse est mieux.La version de Mac: $ ld -v 2, ne savent pas comment obtenir les chemins d'accès.
sortie
ld -v 2
ld
. Le Binutil gens handicapés dans les scripts de construction. Il a été désactivé pendant des années.