J'ai un exécutable lié comme celui-ci:
$ ldd a.out
libboost_system-mt.so.1.47.0 => /usr/lib64/libboost_system-mt.so.1.47.0 (0x00007f4881f56000)
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f4881cfb000)
libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f4881965000)
librt.so.1 => /lib64/librt.so.1 (0x00007f488175d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4881540000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f4881239000)
.
.
Lorsque les bibliothèques libcrypto et Libssl sont OpenSSL 1.0.0-FIPS Libs. Je veux plutôt expérimenter avec les bibliothèques 1.0.1, et donc je les ai construits dans mon répertoire personnel. Y a-t-il un moyen d'obtenir a.out
Pour relier à mes nouvelles bibliothèques OpenSSL sans beaucoup de douleur? Je voudrais éviter
a.out
(parce que les outils de construction sont massivement compliqués)Est-il possible de faire ce que j'espère ici?
Vous pouvez substituer temporairement une bibliothèque différente pour cette exécution particulière. Sous Linux, la variable d'environnement LD_Library_Path est un ensemble de répertoires séparé par deux points où les bibliothèques doivent être recherchées pour la première fois avant l'ensemble standard de répertoires; Ceci est utile lors du débogage d'une nouvelle bibliothèque ou d'une bibliothèque non standard à des fins particulières. La variable d'environnement LD_PRELOAD répertorie les bibliothèques partagées avec des fonctions qui remplacent l'ensemble standard, tout comme /etc/ld.so.procharte. - Bibliothèques partagées
Vous pouvez également appeler directement le chargeur:
/LIB/LD-LINUX.SO.2-LIBRARY-PATH
path
_executable
Écrivez un script wrapper qui définit le LD_LIBRARY_PATH
variable d'environnement. Ceci est le pendentif de PATH
pour les bibliothèques partagées. Le chemin de recherche du système est toujours recherché après les répertoires énumérés dans $LD_LIBRARY_PATH
. Voir le Manuel Dynamic Linker pour référence.
#!/bin/sh
export LD_LIBRARY_PATH=~/opt/openssl-1.0.1/lib
exec /path/to/a.out "$@"
Ou, pour un seul off, directement sur la ligne de commande:
LD_LIBRARY_PATH=~/opt/openssl-1.0.1/lib ./a.out
Sinon, si vous souhaitez modifier le binaire, essayez chrpath , ce qui vous permet de modifier le chemin de recherche de la bibliothèque cuit dans l'exécutable.