Estoy teniendo problemas para compilar algunos de los ejemplos del sdk de odbc. Después de algún tiempo mezclándose con el pedido de la biblioteca, de algún modo me las arreglé para obtener el número de indefinidos referencias a sólo un puñado de ellos.

Lamentablemente, yo no puedo averiguar cómo deshacerse de las restantes. Aquí el comando es el que está fallando:

g++ -Wall -z defs -m64 -DSIMBA -D_REENTRANT -fPIC -O0 -g -shared Common/TabbedUnicodeFileReader_Linux_x8664_debug.cpp.o Core/QSConnection_Linux_x8664_debug.cpp.o Core/QSDriver_Linux_x8664_debug.cpp.o Core/QSEnvironment_Linux_x8664_debug.cpp.o Core/QSStatement_Linux_x8664_debug.cpp.o DataEngine/QSDataEngine_Linux_x8664_debug.cpp.o DataEngine/QSMetadataHelper_Linux_x8664_debug.cpp.o DataEngine/QSTable_Linux_x8664_debug.cpp.o DataEngine/QSTableUtilities_Linux_x8664_debug.cpp.o DataEngine/QSTypeInfoMetadataSource_Linux_x8664_debug.cpp.o Common/QSTableMetadataFile_Unix_Linux_x8664_debug.cpp.o Common/QSUtilities_Unix_Linux_x8664_debug.cpp.o Main_Unix_Linux_x8664_debug.cpp.o    -Wl,--no-undefined -Wl,--no-allow-shlib-undefined -Wl,--whole-archive,/home/hector/Downloads/SimbaEngineSDK/9.0/DataAccessComponents//Lib/Linux_x8664/libSimbaDSI_debug.a,/home/hector/Downloads/SimbaEngineSDK/9.0/DataAccessComponents//Lib/Linux_x8664/libSimbaSupport_debug.a,/home/hector/Downloads/SimbaEngineSDK/9.0/DataAccessComponents//Lib/Linux_x8664/libAEProcessor_debug.a,/home/hector/Downloads/SimbaEngineSDK/9.0/DataAccessComponents//Lib/Linux_x8664/libCore_debug.a,/home/hector/Downloads/SimbaEngineSDK/9.0/DataAccessComponents//Lib/Linux_x8664/libDSIExt_debug.a,/home/hector/Downloads/SimbaEngineSDK/9.0/DataAccessComponents//Lib/Linux_x8664/libExecutor_debug.a,/home/hector/Downloads/SimbaEngineSDK/9.0/DataAccessComponents//Lib/Linux_x8664/libParser_debug.a,/home/hector/Downloads/SimbaEngineSDK/9.0/DataAccessComponents//Lib/Linux_x8664/libSimbaODBC_debug.a -Wl,--no-whole-archive -Wl,--soname=../Bin/Linux_x8664/libQuickstart_debug.so -L/home/hector/Downloads/SimbaEngineSDK/9.0/DataAccessComponents//ThirdParty/icu/Linux_x8664/lib -licuuc_simba64 -licudata_simba64 -licui18n_simba64 -lpthread -lm -lc -ldl -Wl,--version-script=exports_Linux.map -o ../Bin/Linux_x8664/libQuickstart_debug.so

Edición: Faltan símbolos

/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libdl.so: undefined reference to `[email protected]_PRIVATE'
/lib/x86_64-linux-gnu/libpthread.so.0: undefined reference to `[email protected]_PRIVATE'
/lib/x86_64-linux-gnu/libpthread.so.0: undefined reference to `[email protected]_2.2.5'
/lib/x86_64-linux-gnu/libpthread.so.0: undefined reference to `[email protected]_PRIVATE'
/lib/x86_64-linux-gnu/libpthread.so.0: undefined reference to `[email protected]_2.3'
/lib/x86_64-linux-gnu/libpthread.so.0: undefined reference to `[email protected]_PRIVATE'
/lib/x86_64-linux-gnu/libpthread.so.0: undefined reference to `[email protected]_PRIVATE'
/lib/x86_64-linux-gnu/libc.so.6: undefined reference to `[email protected]_PRIVATE'
/lib/x86_64-linux-gnu/libc.so.6: undefined reference to `[email protected]_PRIVATE'
/lib/x86_64-linux-gnu/libpthread.so.0: undefined reference to `[email protected]_PRIVATE'
/lib/x86_64-linux-gnu/libpthread.so.0: undefined reference to `[email protected]_PRIVATE'
/lib/x86_64-linux-gnu/libpthread.so.0: undefined reference to `[email protected]_PRIVATE'

Fijo:

Extracción -Wl, – no-permitir-shlib-indefinido parecía a hacer el truco. El integrado de la biblioteca compartida que parece funcionar a la perfección.

  • Publicar los mensajes de error que está recibiendo.
  • Símbolos que faltan? No veo que en el post…

3 Comentarios

  1. 3

    Hacer un muy común error de novato. colocar las bibliotecas de enlace con en el medio o al principio de la línea de comandos. El vinculador GCC usa las necesidades de las dependencias en inversa orden. Esto significa que si usted tiene una fuente/archivo de objeto S utilizando una función en la biblioteca de L, el archivo tiene que ser antes de que la biblioteca L en la línea de comandos.

    En definitiva, poner las bibliotecas (-lm -lc -ldl) y por último, en la línea de comandos en lugar.

    • He intentado eso, pero sigo teniendo el mismo indefinido referencias
    • Usted tiene algunas bibliotecas en dos lugares. Si el enlazador que ya se ha cargado una biblioteca no se pudo cargar de nuevo y, a continuación, la búsqueda de fallará. Quite todas las bibliotecas antes de la fuente/archivos de objeto, y mantenerlos en la final.
    • Gracias por la información, Joaquín. Lamentablemente todavía se me pone la misma referencia indefinida errores
  2. 1

    Si el vinculador no puede resolver todos hace referencia a los símbolos, a continuación, esto puede ser el resultado de un orden incorrecto de las bibliotecas. Si usted no está seguro de cuál es el orden correcto, a continuación, poner los archivos en «–inicio-grupo de archivos-final-grupo» que, según ld manual de la fuerza de vinculador de búsqueda especificado archivos repetidamente hasta que no indefinido referencias son creados. Pero preste atención a un costo de rendimiento.

Dejar respuesta

Please enter your comment!
Please enter your name here