el título de esta pregunta es exact dupe, pero las respuestas en esa pregunta no me ayudan.Convierta una biblioteca estática a una biblioteca compartida (cree libsome.so de libsome.a): ¿dónde están mis símbolos?
Tengo un montón de archivos de objetos embalados en una biblioteca estática:
% 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
me gustaría generar libsome.so de libsome.a en lugar de los archivos de objetos, pero la biblioteca es muy 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 biblioteca estática está bien, o al menos yo estoy perfectamente capaz de vincularlo a un ejecutable y hacer que se ejecute la funcionalidad contenida. también, todo está bien si creo libsome.so de foo.o y bar.o.
+1 Ahí tienes. Intenté "man ld" y me perdí eso. –
gracias, esto es todo! He buscado la página de manual de ld hacia arriba y hacia abajo, pero de alguna manera he perdido esta opción. –
¡Ahora si solo esta excelente respuesta fuera a indicar también cómo configurar esto con un proyecto CMake! Gracias –