cppyy无法打开共享库

2024-09-30 22:16:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在cppyy中加载一个.so,但出现以下错误

是否有任何方法可以查看由于哪个Load()失败而导致的确切错误

load_my_lib.py:57: in <module>
    cppyy.load_library("mylib.so")
.venv/lib/python3.6/site-packages/cppyy/__init__.py:219: in load_library
    sc = gSystem.Load(name)
E   cppyy.gbl.std.exception: int CppyyLegacy::TSystem::Load(const char* module, const char* entry = "", CppyyLegacy::Bool_t system = kFALSE) =>
E       exception: std::exception

Tags: inpysolib错误libraryexceptionload
1条回答
网友
1楼 · 发布于 2024-09-30 22:16:58

看起来加载库会导致抛出一个std::exception,其what()的结果为空

使用std::exception而不是它的一个派生类,以及没有从what()返回消息都是一种不常见的用法,我不知道加载库调用本身中有什么可能导致这种情况。因此,我最好的猜测是,它是在创建位于mylib.so中的全局或静态变量时抛出的

您知道该库中是否有任何静态或全局变量吗?它们也可能存在于mylib.so链接的库中,并在加载时被拉入

另一种方法有时会得到更好的诊断(虽然我怀疑它在不处理C++异常)是用^ {CD7}}加载库:

import ctypes
d = ctypes.CDLL("mylib.so", ctypes.RTLD_GLOBAL)

ctypes.CDLL没有可移植的行为,这就是load_library存在的原因,但在大多数(并非所有)Linux发行版上,它是一个完美的替代品。)

相关问题 更多 >