Python的 - 导入C++模块接口 - 无法打开共享对象文件
问题描述:
我正在使用的文件夹结构是这样的:Python的 - 导入C++模块接口 - 无法打开共享对象文件
program
program/app/app.py
program/app/lib.so
program/app/py_interfaces.so
program/launcher.py
我编蟒蛇接口py_interaces.so
并带有Boost.Python链接到./lib.so
,所以它会加载库来自与接口相同的文件夹。 我输入接口在app.py
:
import py_interfaces
,如果我跑app.py
它工作正常。但是,我需要从launcher/py
运行,当我这样做,我得到错误:
Import Error: ./lib.so: cannot open shared object file: no such file or directory.
我猜它加载py_interfaces.so
罚款,但它搜索lib.so
在错误的文件夹:program
。是否有可能强制它正确地做到这一点?我应该链接不同吗?我不”要改变工作目录(我需要从根目录program
其他文件)
答
你确定.
是你期望的目录?注意.
表示当前工作工作目录。 launcher.py
与lib.so
不在同一个目录中,所以这就是您所看到的。您链接的方式,你必须在应用程序目录中工作。
尝试在链接时使用实际路径或相对于库的路径py_interfaces.so
。这是您需要在py_interfaces
本身中修复的内容。
编辑:
Here是SO张贴关于相对于可执行/库路径中的文件引用。
正如N.M.所述,链接相对路径的正确方法是在链接时提供-rpath
和$ORIGIN
,使整个依赖关系更加健壮。
我给出了一般答案,但没有更多的代码,因为在你的'PYTHONPATH'和''py_interfaces'引用'lib'的代码中我没有更多的代码。 – kabanus
https://www.google.com/search?q=rpath+origin –