На Linux у меня есть совместно использованная библиотека c, которая зависит от другого, освобождает. LD_LIBRARY_PATH правильно установлен позволить компоновщику загружать все библиотеки. Когда я делаю:
libgidcwf = ctypes.cdll.LoadLibrary(libidcwf_path)
Я получаю следующую ошибку:
Traceback (most recent call last):
File "libwfm_test.py", line 12, in <module>
libgidcwf = ctypes.cdll.LoadLibrary(libidcwf_path)
File "/usr/lib/python2.5/ctypes/__init__.py", line 431, in LoadLibrary
return self._dlltype(name)
File "/usr/lib/python2.5/ctypes/__init__.py", line 348, in __init__
self._handle = _dlopen(self._name, mode)
OSError: path-to-my-lib/libwav.so: undefined symbol: ODBCGeneralQuery
Кажется, что LD_LIBRARY_PATH не имеет никакого эффекта здесь. Существует ли способ иметь их "загружаемая" библиотека зависимости?
Заранее спасибо за справку.
Казалось бы, libwav.so не заявляет о своей зависимости от библиотеки, определяющей ODBCGeneralQuery. Попробуйте запустить ldd path-to-my-lib / libwav.so
и посмотрите, не что-то пропало.Если вы создаете совместно используемую библиотеку, вы должны добавить -llibname
к команде связывания (которая похожа на gcc -shared -o libwav.so ao bo co
) для каждой библиотеки, которую использует код библиотеки. Любые другие библиотеки, на которые ссылается исходная разделяемая библиотека таким образом, также должны быть загружены автоматически.