Отладка dlopen (динамической подгрузки) библиотек в Linux/UNIX

Понадобилось узнать, почему FreeIPA выдавала ошибку загрузки библиотеки, не выдавая подробный текст ошибки. Этот способ позволяет выполнять dlopen() библиотек и смотреть, успешно ли прошла операция, и видеть ошибки.
Используется Python CFFI.

[root@rosa-ipa3 ~]# python
Python 2.7.15 (default, Jun  6 2019, 05:12:57) 
[GCC 5.5.0 20171010 (ROSA)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from cffi import FFI
>>> ffi = FFI()
>>> ffi.dlopen("/usr/lib64/softhsm/libsofthsm2.so")
<cffi.api.FFILibrary_/usr/lib64/softhsm/libsofthsm2.so object at 0x7ff7b5ae7650>
>>> 

Выше пример успешного dlopen библиотеки. А вот пример с ошибкой:

>>> ffi.dlopen("/usr/lib64/softhsm/libsofthsm2.so")
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/lib64/python2.7/site-packages/cffi/api.py", line 141, in dlopen
    lib, function_cache = _make_ffi_library(self, name, flags)
  File "/usr/lib64/python2.7/site-packages/cffi/api.py", line 795, in _make_ffi_library
    backendlib = _load_backend_lib(backend, libname, flags)
  File "/usr/lib64/python2.7/site-packages/cffi/api.py", line 790, in _load_backend_lib
    raise OSError(msg)
OSError: cannot load library /usr/lib64/softhsm/libsofthsm2.so: /usr/lib64/softhsm/libsofthsm2.so: undefined symbol: EC_KEY_free.  Additionally, ctypes.util.find_library() did not manage to locate a library called '/usr/lib64/softhsm/libsofthsm2.so'

Эту ошибку устранил принудительной линковкой с libcrypto (это часть OpenSSL).

Отправить ответ

avatar
  Subscribe  
Сообщать по почте