195 votes

Comment imprimer la ld(linker) chemin de recherche

Quel est le moyen d'imprimer les chemins de recherche dans regardé par ld dans l'ordre qu'il recherche.

146voto

faken Points 2489

Vous pouvez le faire en exécutant la commande suivante:

ld --verbose | grep SEARCH_DIR | tr -s ' ;' \\012

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:

gcc -print-search-dirs | sed '/^lib/b 1;d;:1;s,/[^/.][^/]*/\.\./,/,;t 1;s,:[^=]*=,:;,;s,;,;  ,g' | tr \; \\012

Les réponses ce qui suggère d'utiliser ld..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é).

89voto

telotortium Points 1013

Sur Linux, vous pouvez utiliser ldconfig, ce qui maintient la ld.afin de configuration et de mise en cache, pour imprimer les annuaires de recherche, en ld.so avec

ldconfig -v 2>/dev/null | grep -v ^$'\t'

ldconfig -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); l' grep obtient les répertoires. Sur ma machine, cette ligne affiche

/usr/lib64/atlas:
/usr/lib/llvm:
/usr/lib64/llvm:
/usr/lib64/mysql:
/usr/lib64/nvidia:
/usr/lib64/tracker-0.12:
/usr/lib/wine:
/usr/lib64/wine:
/usr/lib64/xulrunner-2:
/lib:
/lib64:
/usr/lib:
/usr/lib64:
/usr/lib64/nvidia/tls: (hwcap: 0x8000000000000000)
/lib/i686: (hwcap: 0x0008000000000000)
/lib64/tls: (hwcap: 0x8000000000000000)
/usr/lib/sse2: (hwcap: 0x0000000004000000)
/usr/lib64/tls: (hwcap: 0x8000000000000000)
/usr/lib64/sse2: (hwcap: 0x0000000004000000)

Les premiers sentiers, sans hwcap dans la ligne, sont soit intégré ou lire à partir de /etc/ld..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 à la CPU supplémentaire des capacités. Ces chemins, hwcap dans la ligne, peut contenir d'autres bibliothèques sur mesure pour ces CPU capacités.

Une dernière remarque: l'utilisation d' -p au lieu de -v au-dessus de recherches de l' ld.so cache à la place.

75voto

Matthew Slattery Points 21628

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 par SEARCH_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' -L des options sont tout ce que vous avez dit qu'ils sont.
  • Pour voir le linker script, ajoutez l' --verbose option. Recherchez l' SEARCH_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 de l' ld -- 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:

  • Vous pouvez passer l' -v option d' gcc afin qu'il vous montre comment il appelle l'éditeur de liens. En fait, il n'a normalement pas invoquer ld directement, mais indirectement, par l'intermédiaire d'un outil appelé" collect2 (qui vit dans l'un de ses annuaires interne), qui à son tour appelle ld. Qui va vous montrer ce qu' -L des options sont utilisés.
  • Vous pouvez ajouter -Wl,--verbose de la gcc des options pour le faire passer --verbose grâce à l'éditeur de liens, pour voir le linker script comme décrit ci-dessus.

0voto

Pavan Manjunath Points 10853

Sur un ELF basé sur le système, vous pouvez trouver le défaut de la bibliothèque de recherche de chemin dans le fichier /etc/ld.so.conf.

Le contenu d'un tel échantillon /etc/ld.so.conf le fichier sur mon système Ubuntu 11.10 montre

include /etc/ld.so.conf.d/*.conf

Et ls sur /etc/ld.so.conf.d montre

agns.conf  i386-linux-gnu_GL.conf  i686-linux-gnu.conf  libc.conf

Lisez cet article sur les Partagé Bibliothèque des Chemins de Recherche pour savoir des choses comme comment ajouter votre propre chemin de la bibliothèque dans le chemin d'accès par défaut et la comme

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X