Convertir une bibliothèque statique en une bibliothèque partagée (créer libsome.so à partir de libsome.a): où sont mes symboles?
le titre de cette question est un exact dupemais les réponses à cette question ne m'aide pas.
J'ai un tas de fichiers de l'objet emballé dans une bibliothèque statique:
% g++ -std=c++98 -fpic -g -O1 -c -o foo.o foo.cpp
% g++ -std=c++98 -fpic -g -O1 -c -o bar.o bar.cpp
% ar -rc libsome.a foo.o bar.o
J'aimerais générer libsome.donc, à partir de libsome.une place de fichiers de l'objet, mais la bibliothèque est vraiment barebones:
% g++ -std=c++98 -fpic -g -O1 -shared -o libsome.so libsome.a
% nm -DC libsome.so
0000xxxx A _DYNAMIC
0000xxxx A _GLOBAL_OFFSET_TABLE_
w _Jv_RegisterClasses
0000xxxx A __bss_start
w __cxa_finalize
0000xxxx A _edata
0000xxxx A _end
0000xxxx T _fini
0000xxxx T _init
la bibliothèque statique est ok, ou, au moins, je suis parfaitement capable de le lier à un fichier exécutable et de le faire exécuter le contenu de la fonctionnalité. aussi, tout est beau si je créer libsome.donc, à partir de foo.o et d'un bar.o.
source d'informationauteur just somebody | 2010-02-03
Vous devez vous connecter pour publier un commentaire.
En supposant que vous êtes à l'aide de l'éditeur de liens GNU, vous devez spécifier l'option --ensemble d'archives option de sorte que vous aurez tout le contenu de la bibliothèque statique. Puisque c'est une option de l'éditeur de liens, vous aurez besoin-Wl à demander à gcc de passer au travers de l'éditeur de liens:
Si vous faisiez quelque chose de plus compliqué où vous voulez que la totalité de la bibliothèque de certains, mais seulement la partie de la bibliothèque de l'appui dont ils ont besoin libsome, vous souhaitez désactiver la totalité de l'archive après que vous avez utilisé sur libsome:
Si vous n'êtes pas à l'aide de l'éditeur de liens GNU, vous aurez besoin de voir si votre linker supporte et ce qu'il a appelé. Le Soleil de l'éditeur de liens, il est appelé
-z allextract
et-z defaultextract
.Vos fichiers ne sont pas tirés dans de la .un fichier parce que rien n'est de référencement. Pourquoi êtes-vous en faire un .un fichier en premier? Vous auriez plus de chance de faire un .o fichier en lien avec l'option-r.