2010-04-15 10 views

Répondre

3

recompiler les fichiers objets contenus dans libsrp.a avec le drapeau pour créer la position du code indépendant (FPIC) comme dans

gcc -fpic -c foo.c 
gcc -fpic -c bar.c 

Maintenant, vous pouvez combiner foo.o et bar.o en une bibliothèque partagée comme dans

gcc -shared -o libshared.so foo.o bar.o 
2

Utilisez le drapeau --whole-archive:

gcc -shared -o libsrp.so -Wl,--whole-archive -lsrp -Wl,--no-whole-archive 

De l'ld man page (je souligne):

--whole-archives Pour chaque archive mentionnée sur la ligne de commande après l'option --whole-archives, comprennent tous les fichiers d'objets dans l'archive dans le lien, plutôt que de chercher dans l'archive les fichiers objets requis. Ceci est normalement utilisé pour transformer un fichier d'archive en une bibliothèque partagée, forçant chaque objet à être inclus dans la bibliothèque partagée résultante. Cette option peut être utilisée plusieurs fois.

+0

Si le fichier .a d'origine contient des fichiers d'objets qui sont compilés sans fPIC , le fichier .so nouvellement généré peut-il fonctionner correctement? – solotim

+1

@solotim - J'ai réussi à utiliser du code non PIC dans des objets partagés sur Linux 32 bits - bien qu'il semble que ce ne soit pas le cas pour Linux 64 bits. –

Questions connexes