在 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/