在Linux上,我有一个c共享库,它依赖于其他lib。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
似乎图书馆路径对这里没有影响。 有没有办法让这些依赖关系库“可加载”?
提前谢谢你的帮助。
看起来libwav.so没有声明它依赖于定义ODBCGeneralQuery的库。试着运行
ldd path-to-my-lib/libwav.so
,看看是否缺少什么东西。如果这是您正在构建的共享库,则应该为库代码使用的每个库在linking命令(类似于gcc -shared -o libwav.so a.o b.o c.o
)中添加-llibname
。以这种方式被原始共享库引用的任何其他库也应自动加载。你应该用RTLD_GLOBAL。我有一个混合平台系统,所以我的代码如下:
编译共享对象时,请确保将所有
-lsomething
放在string命令的末尾。对我来说这解决了问题。相关问题 更多 >
编程相关推荐