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

时间:2019-02-15 20:30:04

标签: 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,它与我要加载的库位于完全相同的文件夹中。如果有帮助...

1 个答案:

答案 0 :(得分:0)

发现问题的根源是权利。

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

但是,弹出的错误仍然是No such file or directory。我认为这是因为它是C类型库试图加载的C库。它无法加载(因为它没有权限),但显然它不适合传播错误(或者由于C代码的加载方式有些技术原因而无法加载)。

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