Comment liez-vous à une version spécifique d'une bibliothèque partagée dans GCC
Je compile un code qui utilise libcurl sur un système Linux Debian. Mon dev le fonctionnement de la machine Debian 5, mais je veux que le binaire pour être utilisable sur les anciens Debian 4 systèmes.
Je trouve que si je spécifier -lcurl il sera lié à la libcurl.donc.4 mais Debian 4 systèmes ont libcurl.donc.3
Est-il une manière que je peux demander à GCC de lien vers libcurl.donc.3 (qui existe dans les deux Debian 4 et 5) ou tout simplement libcurl.ainsi donc, il faudra utiliser n'importe quelle version est disponible ?
- Sur les anciens Debian, n'est-ce pas libcurl.donc un lien symbolique vers libcurl.donc.3 ? Je veux dire, il semble étrange que -lcurl n'est pas la bonne chose par défaut.
- kastauyra: les versions ne sont pas, ou au moins ne peut pas être supposé, compatible binaire. Donc quand vous faites le lien, c'est la version majeure liée à l'encontre du binaire: si vous compilez le plus récent système, il exigera de version 4 et de ne pas travailler sur l'ancien système. (En fait, ce qu'il enregistre est le soname, qui est une chaîne de caractères stockée dans le fichier de la bibliothèque qui, conventionnellement, mais pas nécessairement est quelque chose de "libcurl.donc.3")
Vous devez vous connecter pour publier un commentaire.
Vous pouvez passer au réel .si le fichier au lieu de -l sur la ligne de commande liens, et il doit faire ce que vous voulez.
Au lieu d'utiliser "-lcurl" utilisation "-l:libcurl.so.3"
Et bien sûr aussi utiliser l'option "-L _installed_path_"
Comment sur la création d'un lien symbolique locale à votre projet, des liens vers .3, vous pouvez simplement utiliser -L au moment de la compilation. Je ne suis pas sûr si vous avez un conflit de nom, mais vous pouvez toujours l'appeler libcurl-vieux.donc, juste au cas où.
Je pense que la bonne façon de le faire est d'utiliser le
--filter
et--auxiliary
drapeaux de l'éditeur de liens.Ils ne sont pas très documenté, mais devrait vous permettre de charger les symboles de différentes versions de la même bibliothèque en fonction de la machine que vous êtes installés sur.