我使用的文件夹结构如下:
program
program/app/app.py
program/app/lib.so
program/app/py_interfaces.so
program/launcher.py
我已经使用boost.python链接到py_interaces.so
编译了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
目录中的其他文件)
答案 0 :(得分:1)
您确定.
是您期望的目录吗?注意.
表示当前工作目录。 launcher.py
与lib.so
不在同一目录中,因此您就是这么看的。你链接东西的方式,你必须在app目录中工作。
尝试使用链接时的实际路径或相对于库的路径py_interfaces.so
。这是您需要在py_interfaces
本身修复的内容。
修改强>
Here是关于引用相对于可执行文件/库路径的文件的SO帖子。
正如N.M. n评论中所提到的,链接相对路径的正确方法是在链接时向-rpath
提供$ORIGIN
,使整个依赖项更加健壮。