Python - 导入c ++模块接口 - 无法打开共享对象文件

时间:2017-04-06 12:05:49

标签: python c++ boost

我使用的文件夹结构如下:

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.soprogram。是否有可能强迫它正确地做到这一点?我应该以不同方式联系我没有'想要更改工作目录(我需要从根program目录中的其他文件)

1 个答案:

答案 0 :(得分:1)

您确定.是您期望的目录吗?注意.表示当前工作目录。 launcher.pylib.so不在同一目录中,因此您就是这么看的。你链接东西的方式,你必须在app目录中工作。

尝试使用链接时的实际路径或相对于库的路径py_interfaces.so。这是您需要在py_interfaces本身修复的内容。

修改

Here是关于引用相对于可执行文件/库路径的文件的SO帖子。

正如N.M. n评论中所提到的,链接相对路径的正确方法是在链接时向-rpath提供$ORIGIN,使整个依赖项更加健壮。