【发布时间】:2013-09-10 19:54:22
【问题描述】:
所以我使用 boost::python: 创建了两个模块:
BOOST_PYTHON_MODULE(A) { ... }
BOOST_PYTHON_MODULE(B) { ... }
这样 B 依赖于 A。然后我尝试使用 python 代码调用它们:
import sys
sys.path.append('path/to/modules/')
import A
import B
... # python body
最后我从终端调用 python 脚本:
python path/to/python/script.py
只要我从安装 boost::python 模块的目录中执行终端命令,它就可以完美地工作。但是,如果我从任何其他目录调用它,我会收到错误
File "path/to/python/script.py", line 6, in <module>
import B
importError: dlopen(path/to/B.so, 2): Library not loaded: A.so
Referenced from: path/to/B.so
Reason: image not found
注意,它在“import B”上失败,所以 sys.path.append 命令将它引导到正确的位置。出于某种原因,boost::python 库不在 sys.path 目录中查找?有没有办法设置这个?我尝试在 boost python 中添加路径,但这似乎只影响库的编译时的东西,而不是 python 正在运行。
有人知道该怎么做吗?
谢谢!
【问题讨论】:
-
为什么要 dlopen 库?您可以在编译时设置依赖项
-
@balki:
dlopen是import行为的一部分。如果在解释器中没有静态链接扩展,动态语言的解释器将如何加载 C++ 库?
标签: c++ python boost boost-python