Quel est le moyen d'imprimer les chemins de recherche dans regardé par ld dans l'ordre qu'il recherche.
Réponses
Trop de publicités?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é).
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.
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 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 qu'-L
des options sont utilisés. - Vous pouvez ajouter
-Wl,--verbose
de lagcc
des options pour le faire passer--verbose
grâce à l'éditeur de liens, pour voir le linker script comme décrit ci-dessus.
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