Tengo una biblioteca compartida utilizada por otra aplicación fuera de mi control que requiere objetos * .so. Mi biblioteca utiliza sqlite3, que necesita estar enlazado estáticamente con él (absolutamente necesito un binario autónomo).C++ Biblioteca compartida vinculada estáticamente
Cuando intento compilar y vincular mi biblioteca:
-fpic -flto -pthread -m64
-flto -static -shared
termino con el siguiente error:
/usr/bin/ld: /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/crtbeginT.o: relocation R_X86_64_32 against `__DTOR_END__' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/crtbeginT.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
Lo que se recompilación con -fPIC relacionado con? Mi código o CRT?
Ya he intentado compilar mi objeto con -fPIC con el mismo resultado.
Gracias.
EDIT:
no parece estar relacionada con SQLite3 El problema.
escribí una biblioteca simple de una sola línea que no hace nada que recopila y enlaces de esta manera:
g++ -c -fPIC -o bar.o bar.cpp
g++ -shared -o bar.so bar.o
pero no como este:
g++ -c -fPIC -o bar.o bar.cpp
g++ -static -shared -o bar.so bar.o
El problema parece estar relacionado con la CRT (crtbeginT.o). ¿Se supone que debo recompilar GCC --with-pic o algo así?
Esto es un poco confuso. ¿Está intentando simplemente vincular su biblioteca a una biblioteca sqlite estática, o está tratando de hacer otra cosa también? – nos
PIC = Código independiente de posición, requerido para libs compartidas (en la mayoría de las arquitecturas, supongo) – sehe
@nos Intentando unir mi biblioteca compartida con sqlite3.a – Petr