web-dev-qa-db-fra.com

Comment créer un lien vers une version spécifique d'une bibliothèque partagée dans GCC

Je compile du code qui utilise libcurl sur un système Debian Linux. Ma machine de développement exécute Debian 5 mais je veux que le binaire soit utilisable sur les anciens systèmes Debian 4.

Je trouve que si je spécifie -lcurl , il sera lié à libcurl.so.4 mais les systèmes Debian 4 ne disposent que de libcurl.so.3

Existe-t-il un moyen de dire à GCC de se connecter soit à libcurl.so.3 (qui existe à la fois dans Debian 4 et 5) ou simplement à libcurl.so afin d’utiliser la version disponible?

39
Adam Pierce

Vous pouvez passer le fichier .so réel au lieu de -l sur la ligne de commande de l’éditeur de liens et il doit faire ce que vous voulez.

25
bdonlan

Au lieu d'utiliser "-lcurl", utilisez "-l: libcurl.so.3" Et bien sûr, utilisez également "-L _installed_path_"

64
engineer.udays

Pourquoi ne pas créer un lien symbolique local vers votre projet lié à .3? Vous pouvez simplement utiliser -L au moment de la compilation. Je ne sais pas si vous obtiendrez un conflit de noms, mais vous pouvez toujours l'appeler libcurl-old.so au cas où.

1
Dana the Sane

Je pense que la bonne façon de faire est d'utiliser les drapeaux --filter et --auxiliary de l'éditeur de liens.

Ils ne sont pas très documentés, mais devraient vous permettre de charger des symboles de différentes versions de la même bibliothèque en fonction de la machine sur laquelle vous êtes installé.

0
galk