Python - 导入 c++ 模块接口 - 无法打开共享对象文件
Python - importing c++ module interfaces - cannot open shared object file
我使用的是这样的文件夹结构:
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.so
:program
.是否有可能强迫它正确执行此操作?我应该以不同的方式链接吗?我不想更改工作目录(我需要根目录program
目录中的其他文件(
您确定.
是您所期望的目录吗?注意.
表示当前工作目录。 launcher.py
与lib.so
不在同一个目录中,所以这就是你所看到的。你链接事物的方式,你必须在应用程序目录中工作。
尝试在链接时使用真实路径或相对于库的路径,py_interfaces.so
。这是您需要在py_interfaces
本身中修复的问题。
编辑:
这是一篇关于引用相对于可执行文件/库路径的文件的 SO 帖子。
正如 N.M. n 在评论中提到的,与相对路径链接的正确方法是在链接时为 -rpath
提供$ORIGIN
,使整个依赖关系更加健壮。
相关文章:
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 如何创建一个共享对象与另一个.所以在Cmake
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 在 Android Studio 中使用 C++ 共享对象时出现问题
- 共享对象、符号、C/C++ 库链接和加载
- ./main:加载共享库时出错:libopencv_highgui.so.4.0:无法打开共享对象文件:没有这样的文件或
- 在 win32 上生成 R 包:无法加载共享对象 (.dll)
- 共享对象中的符号
- sf::Windows上的音乐:api-ms-win-crt-locale-l1-1-0.dll:无法打开共享对象文件
- C++ 为什么要级联共享对象链接
- 加载共享库时出错:libbsoncxx.so._noabi:无法打开共享对象文件:没有此类文件或目录
- 从单个.cpp构建共享对象
- 与 32 位共享对象的链接问题
- 卸载共享对象(.so 文件)在 C++ 中用 dlopen() 打开
- 运行程序时找不到共享对象库,但在编译过程中链接了它
- 错误:无法打开共享对象文件:没有此类文件或目录
- Qt 创建器:将库移动到 subdir 后无法打开共享对象文件
- 共享对象中的符号名称与文件中.cpp函数不同
- C++:在共享对象中调用抽象基类构造函数/未定义的符号
- Cython:共享对象中未定义的符号