在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 a.o b.o c.o的命令)。原始共享库以这种方式引用的任何其他库也应自动加载。

关于python - ctypes加载具有依赖项的c共享库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2327344/

10-09 20:31
查看更多