我正在尝试在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发布于 2020-12-17 02:29:33
看起来这个库的加载会导致抛出一个从它的what()中抛出的空结果的std::exception。
使用std::exception而不是它的一个派生类,以及没有从what()返回消息都是一种不常见的用法,我不知道加载库调用本身中有任何东西会导致这种情况。因此,我最好的猜测是它在创建mylib.so中的全局或静态变量时抛出。
您是否知道该库中是否有任何静态变量或全局变量?这些也可能存在于mylib.so所链接的库中,并在加载时被拉入。
另一种有时可以获得更好诊断的方法(尽管在这种情况下我对此表示怀疑,因为它不处理C++异常)是使用ctypes加载库:
import ctypes
d = ctypes.CDLL("mylib.so", ctypes.RTLD_GLOBAL)(ctypes.CDLL没有可移植的行为,这就是load_library存在的原因,但在大多数,不是所有的Linux发行版上,它是一个完美的选择。)
https://stackoverflow.com/questions/65320728
复制相似问题