53 votes

Puis-je mélanger statique et de bibliothèques d'objets lors de la liaison?

J'ai un projet C qui produit dix exécutables, tous de qui je voudrais être liés de manière statique. Le problème, je suis confronté est que l'un de ces exécutables utilise une 3ème partie de la bibliothèque dont seule la commune-version objet est disponible.

Si je passe l' -static drapeau à gcc, ld va d'erreur en disant qu'il ne peut pas trouver la bibliothèque en question (je présume qu'il est à la recherche de l' .une version) et que l'exécutable ne sera pas construit. Idéalement, je voudrais être en mesure de dire 'ld' lien statique autant qu'il peut et ne parviennent pas à l'objet partagé bibliothèque si une bibliothèque statique ne peut pas être trouvé.

Dans le interium j'ai essayé quelque chose comme gcc -static -lib1 -lib2 -shared -lib3rdparty foo.c -o foo.exe , dans l'espoir que 'ld' permettrait de lier statiquement dans lib1 et lib2 mais seulement un moment de l'exécution de la dépendance sur les lib3rdparty. Malheureusement, cela ne fonctionne pas comme prévu; au contraire, l' -shared drapeau a remplacé l' -static drapeau et tout ce qui a été compilé que partagés objets.

Est la liaison statique d'un tout-ou-rien, ou est-il une façon pour moi de mélanger et match?

66voto

anthony-arnold Points 6336

La recherche à ce fil , vous pouvez voir qu'il peut être fait. Les mecs de chez GNU suggèrent

gcc foo.c -Wl,-Bstatic -lbar -lbaz -lqux -Wl,-Bdynamic -lcorge -o foo.exe

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X