linux - 无法为 ctypes 设置环境变量(python 的 c 库)

标签 linux python-3.x ctypes

我需要将一些第三方 C 库导入到低级模块中。我正在关注 these instructions .它说 find_library() 应该帮助我找到这样一个库,不包括任何库前缀和 .so 后缀。

#next 2 lines just to test
test =find_library('spcm_linux')
print(test)
#this line below is the actual code
spcmDll = cdll.LoadLibrary("libspcm_linux.so")

返回:

None
OSError: spcm_linux.so: cannot open shared object file: No such file or directory

我的图书馆位于:

/usr/lib/gcc/x86_64-linux-gnu/libspcm_linux.so

从文档中阅读有关 find_library() 的信息,它告诉我可以设置一个环境变量来添加一个环境变量 (LD_LIBRARY_PATH)。所以在/etc/environement 中我有:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:"
PYTHONPATH="/home/fv/.local/lib/python3.6/site-packages"
LD_LIBRARY_PATH="/usr/lib/gcc/x86_64-linux-gnu"

我重新启动,尝试它仍然不起作用(相同的错误消息)。

“查找”我的图书馆的任何其他方式?可以直接将它放在我的 program.py 目录中并以其他方式导入吗?

编辑:

但是,它确实找到了 libgomp.so.1,它与我要加载的库位于完全相同的文件夹中。如果这有帮助...

最佳答案

原来问题的根源是权利。

libspcm_linux.so 库的权限设置不正确,因此脚本没有访问权限。

但是,弹出的错误仍然是关于No such file or directory。我认为这是因为它是一个 C 库,ctypes 试图加载它。它无法加载它(因为它没有它的权利)但是显然它不认为它适合传播错误(或者不能因为 C 代码加载方式的一些技术细节,可能)。

因此从它的角度来看,它无法加载请求的库,并告诉我 - “没有这样的文件或......”即使这隐藏了问题的真正原因。

关于linux - 无法为 ctypes 设置环境变量(python 的 c 库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54716613/

相关文章:

python - 将 FILE * 传递给 Python/ctypes 中的函数

json - 在 docker-compose.yml 中传递 Json 文件内容

linux - 如何 grep 2 或 3 行,其中包含我想要的文本,其他的就在它下面

python-3.x - 如何使用python从docx文件的标题下提取文本

python - tkinter 窗口获取没有窗口顶部的 x、y、几何/坐标

python - 使用 Python 在 Windows 中获取电池容量

linux - 通过 linux iptables 路由

无法在启用的 CPU 上使用 SSSE3

python - waf 找不到正确的 python 版本

python - 从可变位宽扩展的符号