Question

J'ai une bibliothèque tierce composée principalement d'un grand nombre de fichiers de bibliothèque statiques ( .a ). Je peux le compiler dans un seul fichier de bibliothèque .a , mais j’ai vraiment besoin que ce soit un fichier de bibliothèque .so unique.

Existe-t-il un moyen de convertir un fichier .a statique en un fichier .so partagé? Ou plus généralement, existe-t-il un bon moyen de combiner un grand nombre de fichiers statiques .a avec quelques fichiers objets .o en un seul .so fichier?

Était-ce utile?

La solution

Est-ce que cela (avec les -L appropriés bien sûr)

gcc -shared -o megalib.so foo.o bar.o -la_static_lib -lb_static_lib

Ne le faites pas?

Autres conseils

Vous ne pouvez pas faire cela si les objets de la bibliothèque statique ont été compilés sans -fPIC ou similaire.

g++ -shared -o megalib.so foo.o bar.o -Wl,--whole-archive -la_static_lib -lb_static_lib -Wl,--no-whole-archive -lc_static_lib -lother_shared_object

Je ne suis pas sûr de gcc, mais pour g ++, j'ai dû ajouter l'option de l'éditeur de liens --whole-archive pour inclure les objets des bibliothèques statiques dans l'objet partagé. L'option --no-whole-archive est nécessaire si vous souhaitez créer un lien vers libc_static_lib.a et libother_shared_object.so, sans toutefois les inclure intégralement dans mégalib.so.

ar -x lib***.a
gcc -shared *.o -o lib***.so

ar -x peut également être utile si vous souhaitez vous concentrer sur des objets spécifiques à partir de vos .a et que vous ne souhaitez rien ajouter vous-même.

Exemples:

ar -x lib***.a
gcc -shared *.o -o lib***.so
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top