il titolo di questa domanda è un exact dupe, ma le risposte in quella domanda non mi aiutano.Converti una libreria statica in una libreria condivisa (crea libsome.so da libsome.a): dove sono i miei simboli?
Ho un sacco di file oggetto imballato in una libreria statica:
% 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
mi piacerebbe per generare libsome.so da libsome.a anziché i file oggetto, ma la biblioteca è davvero barebone:
% 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 libreria statica è ok, o almeno io sono perfettamente in grado di collegarlo a un eseguibile e fare eseguire la funzionalità contenute. inoltre, tutto va bene se creo libsome.so da foo.o e bar.o.
+1 Ci vai. Ho provato "man ld" e l'ho perso. –
grazie, questo è! ho cercato la manpage di ld su e giù, ma in qualche modo ho perso questa opzione. –
Ora, se solo questa eccellente risposta dovesse indicare anche come impostare questo con un progetto CMake! Grazie –