c++ - Referencia indefinida a ''dlsym''
gcc compiler-errors (1)
He encontrado la solución; configurando -Wl, - no-as-needed before -ldl El nuevo comando de compilación es
gcc main.cpp -lsqlapi -lstdc ++ -Wl, - no-as-needed -ldl
Aparentemente, tiene algo que ver con las versiones recientes de gcc / ld por defecto para enlazar con --as-needed.
He visto muchas publicaciones similares, pero probé todos los trucos del libro y todavía estoy luchando. Todo funcionaba bien, pero después de instalar / eliminar Wirehark con algunos componentes / deselectores, todo se desordenó. No recuerdo exactamente qué bibliotecas / paquetes se desinstalaron, pero probablemente mucho más de lo que noté.
Si creo un archivo main.cpp simple como este:
#include <SQLAPI.h>
int main()
{
SAConnection con;
return 0;
}
y prueba
g ++ main.cpp -lsqlapi -ldl
me da los siguientes mensajes de error:
/usr/local/lib/libsqlapi.so: undefined reference to `dlsym''
/usr/local/lib/libsqlapi.so: undefined reference to `dlerror''
/usr/local/lib/libsqlapi.so: undefined reference to `dlopen''
/usr/local/lib/libsqlapi.so: undefined reference to `dlclose''
collect2: error: ld returned 1 exit status
He intentado poner -ldl antes de -lsqlapi, ya que algunos han sugerido que el orden es importante. Si uso gcc en lugar de g ++, el error es:
/usr/bin/ld: /tmp/ccwBI4tj.o: undefined reference to symbol ''__gxx_personality_v0@@CXXABI_1.3''
/usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Puedo compilar y ejecutar el archivo si se elimina SAConnection.
No creo que tenga nada que ver con SQLAPI, porque tengo problemas similares con libboost. No tengo un ejemplo de código pequeño, pero cuando compilo un proyecto que se compiló con éxito la semana pasada, aparece el error:
/usr/bin/ld: debug/components/helloworld/HelloWorld.o: undefined reference to symbol ''_ZN5boost6system15system_categoryEv''
/usr/lib/x86_64-linux-gnu/libboost_system.so.1.53.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Este proyecto está utilizando un Makefile que no ha cambiado, por lo que tiene que ser algo en mi sistema que no sea correcto. He intentado reinstalar build-essential.
Usando Ubuntu 64 bit 13.10 con g ++ versión 4.8.1.