python - ctypes 加载具有依赖关系的 c 共享库

标签 python linux ctypes

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

相关文章:

python 使用 ctypes 处理 dll - 结构 OUT 参数

python - 如何使用 flask 框架在 python web 应用程序中后台发送电子邮件?

linux - GUI 使用 Shell 批处理文件

linux - 从linux中的字符串中提取字符串

python - ctypes:提取 C 库返回的结构成员

python - 如何使用 ctypes 获取 32 位 int 的前 11 位

python - 多个消费者,是否可以克隆一个队列(gevent)?

python - Pandas 数据透视表排列没有带符号的聚合

python - 从同一类定义中实例化 python 类

linux - 从 64 位机器远程调试 Beaglebone