如何解决Cppyy调用load_library时报RuntimeError的问题
cppyy加载动态库失败排查方案
1. 优先排查平台与编译产物匹配问题
从报错路径的~\anaconda3\ Windows盘符格式可以判断你运行在Windows系统中,但你使用的编译命令是生成Linux/macOS平台专用的.so动态库,Windows系统下动态库后缀为*.dll*,这是最高概率的报错原因:
- 替换C++编译指令为Windows下生成dll的对应命令:
g++ -c -fPIC foo.cpp -o foo.o g++ -shared -o libfoo.dll foo.o
- 加载时优先使用完整文件名避免后缀识别歧义:
cppyy.load_library("libfoo.dll")
2. 动态库搜索路径问题排查
如果编译产物格式正确仍报错,说明动态库不在cppyy的默认搜索路径内,可采用以下任意一种方案解决:
- 将
libfoo.dll放到你当前Jupyter Notebook的工作目录下,即和你运行代码的.ipynb文件同目录 - 加载时传入动态库的绝对路径,示例如下(替换为你实际的文件路径):
cppyy.load_library("C:/Users/你的用户名/代码目录/libfoo.dll")
- 提前将动态库所在目录添加到Windows系统动态库搜索路径(该接口仅Python 3.8及以上版本支持):
import os # 替换为libfoo.dll所在目录的完整路径 os.add_dll_directory("C:/Users/你的用户名/代码目录/") cppyy.load_library("libfoo")
3. 其他低概率问题排查
如果上述操作都完成仍报错,可逐一验证以下项:
- 确认g版本和Python版本位数一致:64位Python必须使用64位MinGW的g编译,32位对应32位,位数不匹配会直接导致加载失败
- 如果你后续添加了第三方依赖,需要把依赖的所有dll文件也放到动态库搜索路径内
内容的提问来源于stack exchange,提问作者KuuhakuBlank00
相关产品推荐
相关产品推荐

