Comment créer un lien vers une version spécifique d'une bibliothèque partagée dans GCC
Question
Je suis en train de compiler 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 constate 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 créer un lien vers libcurl.so.3 (qui existe à la fois dans Debian 4 et 5) ou simplement libcurl.so pour qu'il utilise la version disponible?
La solution
Vous pouvez transmettre le fichier .so actuel au lieu de -l sur la ligne de commande de l'éditeur de liens et il doit faire ce que vous voulez.
Autres conseils
Au lieu d'utiliser " -lcurl " utilisez " -l: libcurl.so.3 " Et bien sûr, utilisez également "-L _installed_path_"
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 nom, mais vous pouvez toujours l'appeler libcurl-old.so au cas où.
Je pense que la bonne façon de procéder consiste à utiliser les indicateurs - filter
et - auxiliaire
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é.