He creado una aplicación (api_tests) que utiliza una biblioteca (libstorage.así) que enlaza con oracle occidental de la biblioteca (libocci.así.12.1) y compilado.
Al ejecutar esta aplicación, me sale un error:

api_tests
api_tests: symbol lookup error: ./libstorage.so: undefined symbol: _ZN6oracle4occi11Environment17createEnvironmentENS1_4ModeEPvPFS3_S3_mEPFS3_S3_S3_mEPFvS3_S3_E

Sin embargo esta biblioteca con este símbolo existe en el directorio actual:

ls | grep libocci
libocci.so*
libocci.so.11.1*
libocci.so.12.1*

nm libocci.so.12.1 | grep _ZN6oracle4occi11Environment17createEnvironmentENS1_4ModeEPvPFS3_S3_mEPFS3_S3_S3_mEPFvS3_S3_E
0000000000097e70 T _ZN6oracle4occi11Environment17createEnvironmentENS1_4ModeEPvPFS3_S3_mEPFS3_S3_S3_mEPFvS3_S3_E
0000000000125014 r _ZN6oracle4occi11Environment17createEnvironmentENS1_4ModeEPvPFS3_S3_mEPFS3_S3_S3_mEPFvS3_S3_E$$LSDA

La ruta de acceso actual se añade a LD_LABRARY_PATH:

echo $LD_LIBRARY_PATH
./:/usr/vacpp/bin/../lib:/lib

Me pregunto qué puede haber de malo en mi biblioteca y cómo puedo depurar el problema?

Actualización:
Parece que esta biblioteca no estaba vinculado (al menos ldd no muestra esta dependencia). Yo creo que fue un error en el fichero makefile y fue compilado pero failes en tiempo de ejecución.

  • ldd ./libstorage.so ?
  • ls -l ./libocci* ?

1 Comentario

  1. 3

    nm libocci.so.12.1

    Hay dos problemas con el comando anterior:

    1. No sabe si libocci.so.12.1 es en realidad llegar cargado en su proceso. Para responder a la «que libocci es llegar cargado», a ejecutar con LD_DEBUG=libs.
    2. Sólo porque el símbolo está presente en la tabla de símbolos de libocci.so.12.1 no significa que está disponible para la vinculación dinámica. Es debe estar disponibles en el dinámica de la tabla de símbolos, que puede examinar con nm -D libocci.so.12.1
    • Gracias por la respuesta! Parece que esta biblioteca no estaba vinculado (al menos ldd no muestra esta dependencia). Yo creo que fue un error en el fichero makefile y fue compilado pero failes en tiempo de ejecución.
    • ¿Cuál fue el error en el archivo makefile y cómo subsanarlo. Incluso para mí, la vinculación dinámica no está sucediendo. cuando ejecuto $> nm -D libcusolver.así.8.0 I get nm: ‘libcusolver.así.8.0’ no existe el fichero o el directorio

Dejar respuesta

Please enter your comment!
Please enter your name here