linux - 无法为 ctypes 设置环境变量(python 的 c 库)
问题描述
我需要将一些第三方 c 库导入到低级模块中。我正在按照这些说明进行操作。它说 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 目录中并以其他方式导入吗?
编辑:
但是,它确实 find libgomp.so.1
,它与我要加载的库位于完全相同的文件夹中。如果这有帮助...
解决方案
原来问题的根源是权利。
lib 的权限libspcm_linux.so
设置不正确,因此脚本没有访问权限。
但是,弹出的错误仍然是大约No such file or directory
。我想这是因为它是一个 C 库,ctypes 试图加载它。它无法加载它(因为它没有权限)但显然它认为它不适合传播错误(或者因为 C 代码加载方式的一些技术性问题而不能)。
因此从它的角度来看,它无法加载请求的库,并告诉我 - “没有这样的文件或......”即使这隐藏了问题的真正原因。
推荐阅读
- java - 参数化 Spring bean 配置
- python - 将带有布尔输入占位符的 TensorFlow 模型转换为 TensorFlow Lite
- sql-server - SQL Server 动态 SQL 大小超过 4000 个字符
- javascript - 授权代码请求上的 Google OAuth2 response_type 错误
- android - Twitter 登录不适用于 crashlytics sdk。错误:必须首先使用 Fabric.with() 启动 Twitter Kit
- python - 如何使用烧瓶通过所有路由登录用户?
- maven - 在 jenkins 上构建的 Maven 运行两个模块的测试
- hadoop - 在现有集群中添加节点
- vba - 编译错误:excel中的预期函数或变量
- reactjs - 将表单重置为空值