cppyy 无法打开共享库

cppyy unable to open shared library

我正在尝试在 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

看起来库的加载导致 std::exception 被抛出,其中 what().

的结果为空

使用 std::exception 而不是派生的 类,以及没有从 what() 返回任何消息都是一种不常见的用法,我'我不知道加载库调用本身会导致这种情况。因此,我最好的猜测是它在创建位于 mylib.so.

中的全局或静态变量期间被抛出

你知道那个库里有没有静态变量或者全局变量?这些也可能存在于 mylib.so 链接的库中,并在加载时被拉入。

有时获得更好诊断的另一种方法(尽管在这种情况下我对此表示怀疑,因为它不处理 C++ 异常)是使用 ctypes 加载库:

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

ctypes.CDLL 没有便携行为,这就是 load_library 存在的原因,但在大多数(并非全部)Linux 发行版中,它是一个完美的选择。)