2009-05-27 7 views
28

Dites que j'ai un.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, résolvant bien sûr toutes les intra-dépendances (c'est-à-dire toutes les fonctions de b.so appelées par a.so et inversement)?Fusionner plusieurs bibliothèques partagées .so

J'ai essayé

gcc -shared -Wl,soname,c.so -o c.so a.so b.so

mais il ne fonctionne pas.

va de même si j'archiver a.o et b.o dans A.Une et B.Une (qui ne devrait pas modifier a.o et b.o), et ne

gcc -shared -Wl,soname,c.so -o c.so a.a b.a

Merci

+0

En fin de compte j'ai eu recours à utiliser un script de bibliothèque avec un groupe qui me permet de montrer toutes les petites bibliothèques comme un seul, mais un logiciel pourrait simplement être relié à la bonne bibliothèque "sub". – Metiu

Répondre

38

La fusion de plusieurs bibliothèques partagées en une seule est en effet pratiquement impossible sur tous les UNIXen, sauf AIX: l'éditeur de liens considère le .so comme un produit "final".

Mais la fusion des archives dans .donc ne devrait pas être un problème:

gcc -shared -o c.so -Wl,--whole-archive a.a b.a -Wl,--no-whole-archive 
+0

Merci pour le drapeau utile: archive complète! –

+0

L'ordre des archives est-il important ici? Si j'ai un tas de fichiers .a, puis-je utiliser * .a? – Raj

+1

@Raj Non, la commande n'a pas d'importance - ils seront tous inclus dans leur intégralité. Si vous n'avez pas de redéfinitions de symboles dans votre '* .a', alors' * .a' fonctionnera simplement (TM). –

7

Dans la pratique, il est impossible. Du point de vue de l'éditeur de liens, une bibliothèque SO est un produit final qui ne contient pas les informations de relocalisation requises pour la liaison.

Si vous avez accès à des fichiers source ou objet pour les deux bibliothèques, il est facile de compiler/lier un SO combiné à partir de ces bibliothèques.

+1

"Si vous avez accès à des fichiers source ou objet pour les deux bibliothèques, il est facile de compiler/lier un SO combiné à partir d'eux." --- Comment puis-je faire cela ? Plus précisément, sur la plate-forme Android. –

Questions connexes