web-dev-qa-db-fra.com

Fusionner plusieurs bibliothèques partagées.

Dis que j'ai A.So et B.So. Puis-je produire C.SO comme une bibliothèque partagée unique avec toutes les fonctions exportées par A et B, bien entendu résoudre toutes les dépendances intra-dépendances (c'est-à-dire toutes les fonctions de B.SO appelées par A.SO et l'inverse de l'inverse)?

J'ai essayé

gCC -Shared -WL -WL, SONAME, C.SO -O C.SO A.SO B.SO

mais ça ne marche pas.

Même va si j'archive a.o et b.o dans A.A et B.A (qui ne devrait pas modifier a.o et b.o), et faire

gCC -Shared -WL -WL, Soname, C.SO -O C.SO A.A B.A

Merci

40
Metiu

La fusion de plusieurs bibliothèques partagées en une seule est vraiment pratiquement impossible à tous unixen, à l'exception de AIX: le linker considère le produit "final".

Mais fusionner des archives en .so ne devrait pas être un problème:

gcc -shared -o c.so -Wl,--whole-archive a.a b.a -Wl,--no-whole-archive
44
Employed Russian

En pratique, ce n'est pas possible.

Du point de vue de la liaison, A SO Library est un produit final qui ne contient pas d'informations de relocalisation requises pour la liaison.

Si vous avez accès à des fichiers source ou d'objet pour les deux bibliothèques, il est simple de compiler/relier une combinaison SO d'entre eux.

7
laalto