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

Python - importing c++ module interfaces - cannot open shared object file

本文关键字:共享 对象 文件 导入 c++ 模块 接口 Python      更新时间:2023-10-16

我使用的是这样的文件夹结构:

program
program/app/app.py
program/app/lib.so
program/app/py_interfaces.so
program/launcher.py

我已经编译了 python 接口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.soprogram.是否有可能强迫它正确执行此操作?我应该以不同的方式链接吗?我不想更改工作目录(我需要根目录program目录中的其他文件(

您确定.是您所期望的目录吗?注意.表示当前工作目录。 launcher.pylib.so不在同一个目录中,所以这就是你所看到的。你链接事物的方式,你必须在应用程序目录中工作。

尝试在链接时使用真实路径或相对于库的路径,py_interfaces.so 。这是您需要在py_interfaces本身中修复的问题。

编辑:

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

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