我试图在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++异常)是用^ {CD7}}加载库:
(
ctypes.CDLL
没有可移植的行为,这就是load_library
存在的原因,但在大多数(并非所有)Linux发行版上,它是一个完美的替代品。)相关问题 更多 >
编程相关推荐