Ceci est une citation du livre de programmation Linux:comment forcer l'éditeur de liens à utiliser la bibliothèque partagée au lieu de la bibliothèque statique?
% gcc -o app app.o -L. –ltest
Supposons que les deux libtest.a
et libtest.so
sont available.Then l'éditeur de liens doit choisir l'une des bibliothèques et non l' L'éditeur de liens recherche dans chaque répertoire (d'abord ceux spécifiés avec -L
options, puis ceux dans les répertoires standard) .Lorsque l'éditeur de liens trouve un répertoire qui contient soit libtest.a
ou libtest.so
, l'éditeur de liens arrête répertoires de recherche. Si une seule des deux variantes est présente dans le répertoire, l'éditeur de liens choisit cette variante. Sinon, l'éditeur de liens choisit la version de la bibliothèque partagée, à moins que vous ne l'indiquiez explicitement autrement. Vous pouvez utiliser l'option -static
pour demander des archives statiques . Par exemple, la ligne suivante utilisera l'archive libtest.a
, même si la libtest.so
bibliothèque partagée est également disponible:
% gcc -static -o app app.o -L. –ltest
Depuis si l'éditeur de liens rencontre le répertoire qui contient libtest.a
il arrête la recherche et les utilisations cette bibliothèque statique, comment forcer l'éditeur de liens à rechercher uniquement la bibliothèque partagée, et non pas statique?
% gcc -o app app.o -L. libtest.so
?
Note: Cette utilisation de '-l' est non documentée. Il inclura le chemin d'accès complet à la bibliothèque dans l'exécutable, ce qui signifie que la bibliothèque ne pourra jamais être déplacée de son emplacement actuel. –
@KevinPanko L'option '-l' est documentée dans' man ld', https: //linux.die.net/man/1/ld - Je ne peux pas facilement le tester mais selon le doc: Si namespec est de la forme ': filename ',' ld' cherchera dans le chemin de la bibliothèque un fichier appelé 'filename'. Comme je l'ai mentionné, les anciennes versions de 'ld' ne supportent pas cette option. –
Je vérifiais la documentation de 'gcc' ici: [Options pour lier] (https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html) –