Il me semble étrange d’utiliser -Wl,-Bstatic
pour indiquer à gcc
les bibliothèques avec lesquelles je veux créer un lien statique. Après tout, je communique directement à gcc
toutes les autres informations sur la liaison avec des bibliothèques (-Ldir
, -llibname
).
Est-il possible de dire directement au pilote gcc quelles bibliothèques doivent être liées statiquement?
Clarification: Je sais que si une certaine bibliothèque n'existe que dans des versions statiques, elle l'utilisera sans -Wl,-Bstatic
, mais je veux impliquer gcc
pour préférer la bibliothèque statique. Je sais également que spécifier le fichier de bibliothèque directement serait lié à celui-ci, mais je préfère conserver la même sémantique pour inclure les bibliothèques statiques et dynamiques.
Il est bien sûr possible d’utiliser -l:
au lieu de -l
. Par exemple, -l:libXYZ.a
pour créer un lien avec libXYZ.a
. Notez le lib
écrit, par opposition à -lXYZ
qui se développerait automatiquement en libXYZ
.
Vous pouvez ajouter un fichier .a dans la commande de liaison:
gcc yourfiles /path/to/library/libLIBRARY.a
Mais ce n'est pas parler avec le pilote gcc, mais avec ld
l'éditeur de liens comme options comme -Wl,anything
sont.
Lorsque vous dites à gcc ou à ld "-Ldir -lLIBRARY", l'éditeur de liens vérifiera les versions statiques et dynamiques de la bibliothèque (vous pouvez voir un processus avec -Wl,--verbose
). Pour modifier l'ordre des types de bibliothèque cochés, vous pouvez utiliser -Wl,-Bstatic
et -Wl,-Bdynamic
. Voici une page de manuel de gnu LD: http://linux.die.net/man/1/ld
Pour lier votre programme à lib1, lib3 dynamiquement et lib2 statiquement, utilisez l’appel gcc suivant:
gcc program.o -llib1 -Wl,-Bstatic -llib2 -Wl,-Bdynamic -llib3
en supposant que le paramètre par défaut de ld est d'utiliser des bibliothèques dynamiques (c'est sous Linux).