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 发行版中,它是一个完美的选择。)
我正在尝试在 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 发行版中,它是一个完美的选择。)