2010-10-01 6 views
24

Suite à la question How do applications resolve to different versions of shared libraries at run time?, je me demandais comment spécifier sur la ligne de commande de lien quelle version de la bibliothèque à utiliser?Comment spécifier la version de la bibliothèque à utiliser au moment de la liaison?

Disons que je

libmy.so.1.0 
libmy.so.1 -> libmy.so.1.0 
libmy.so.2.0 
libmy.so.2 -> libmy.so.2.0 
libmy.so  -> libmy.so.2 

La manière habituelle de spécifier la bibliothèque de lien avec l'exécutable ne montre pas la version à utiliser. De plus, il est très probable que l'on veuille un lien avec la version la plus récente. Ainsi, la ligne habituelle fonctionne bien dans la plupart des cas.

gcc app.o -lmy -o app 

Quelle est la ligne de commande pour créer un lien app qui devrait utiliser la version 1 de la bibliothèque?

Répondre

31

L'éditeur de liens est en mesure d'accepter les noms de fichiers trop

gcc app.o -l:libmy.so.1 -o app 

De man ld:

-l namespec
--library = namespec
Ajoutez le fichier d'archive ou de l'objet spécifié par namespec à la liste des fichiers à lier. Cette option peut être utilisée n'importe quel nombre de fois. Si namespec est de la forme: filename, ld recherchera dans le chemin de la bibliothèque un fichier appelé, sinon il recherchera le chemin de la bibliothèque pour un fichier appelé libnamespec.a.

je remarquai que les anciennes versions ne supportent pas, afin de vérifier man ld-l ou --library option sur votre système.

Vous pouvez également un lien vers le fichier mentionner son nom complet

gcc app.o /mylibpath/libmy.so.1 -o app 
+10

Attention: ce linker utilise, et ce qui est résolu sur l'exécution dynamiquement (ce 'ldd app' montrera) pourrait être pas la même chose . –