Incluso si se le da una ruta de acceso completa a CDLL o cdll.LoadLibrary(), es posible que aún tenga que configurar LD_LIBRARY_PATH antes de invocar Python. Si la biblioteca compartida que carga explícitamente hace referencia a otra biblioteca compartida y no se establece "rpath" en .so para esa biblioteca, no se encontrará, incluso si ya se ha cargado. Un rpath en una biblioteca especifica una ruta de búsqueda que se utilizará para buscar otras bibliotecas necesarias para esa biblioteca
Por ejemplo, tengo un caso de un conjunto de bibliotecas de terceros interdependientes que no he creado. b.so hace referencia a.so. Incluso si me carga a.so con antelación:
ctypes.cdll.LoadLibrary('/abs/path/to/a.so')
ctypes.cdll.LoadLibrary('/abs/path/to/b.so')
consigo un error en la segunda carga, porque b.so se refiere a simplemente 'a.so', sin un rpath, y así b.so doesn' Sé que ese es el correcto. Así que tengo que establecer LD_LIBRARY_PATH de antemano para incluir '/ abs/path/to'.
Para evitar tener que establecer LD_LIBRARY_PATH, modifique la entrada rpath en los archivos .so. En Linux, hay dos utilidades que encontré que hacen esto: chrpath y patchelf. Chrpath está disponible en los repositorios de Ubuntu. No puede cambiar rpath en .so que nunca tuvo uno. patchelf es más flexible.
esto diagnostica el problema pero no lo resuelve. – dbliss