cppyy 无法打开共享库
Posted
技术标签:
【中文标题】cppyy 无法打开共享库【英文标题】:cppyy unable to open shared library 【发布时间】:2020-12-16 09:40:11 【问题描述】:我正在尝试在 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
【问题讨论】:
【参考方案1】:看起来库的加载导致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 发行版中,它是一个完美的选择。)
【讨论】:
感谢您的指点。事实上,这个库正在使用 gtest.so,由于一些设置问题,它无法找到。以上是关于cppyy 无法打开共享库的主要内容,如果未能解决你的问题,请参考以下文章
加载共享库时出错:libgmock.so:无法打开共享对象文件:没有这样的文件或目录
无法加载动态库“libcupti.so.11.0”; dlerror: libcupti.so.11.0: 无法打开共享对象文件
错误 1126 (HY000): 无法打开共享库 'lib_mysqludf_sys.so' (errno: 193)
加载共享库时出错:libgfortran.so.1:无法打开共享对象文件:没有这样的文件或目录