[已解决] Python调用C++ Dll打包运行时报错: Failed to load dynlib/dll xxx.dll

[已解决] Python调用C++ Dll打包运行时报错 PyInstallerImportError: Failed to load dynlib/dll xxx.dll


1. 问题描述

Python通过ctypes调用C++ Dll库,pyinstaller打包成exe后在本机正常运行,但是放到别的PC上单独运行就报错,提示:

PyInstallerImportError: Failed to load dynlib/dll xxxx.dll …

注:我这里是将该dll打包进了exe,但尝试把dll文件直接放入exe目录中 也同样报错

报错信息如下图:

Ctypes调用API没有问题,通过常规ctypes.cdll.LoadLibrary()或ctypes.CDLL():

dll路径方面也正确:

在这里插入图片描述

本机测试过程没有任何问题,所以当时就比较奇怪都打包进exe了,还会有这类DLL not found issue


2. 问题原因

最终发现问题 rootcause:

  • 是由于该dll本身也有依赖,因此需要将dll在当前开发环境的依赖包,同样放到目标环境exe目录中(或直接打包进exe),才可以正确执行

否则就算将源码迁移到另一台机器,运行时也是报同样的错误,因为该dll依赖在目标机器系统内不支持


3. 问题解决

首先通过 dependencywalker 工具来查找该Dll的依赖包:

下载后,打开depends.exe工具,将相关dll导入,即可找到所有依赖,

在这里插入图片描述

例如我这里使用的dll有4个依赖:

在这里插入图片描述
在这里插入图片描述

然后在 C:\Windows\System32 下,依次找到所依赖的库文件

在这里插入图片描述

复制到exe执行目录,即可正常运行。
在这里插入图片描述

为了优化解决办法,可以把所有依赖的dll都打包进exe中,方便在目标PC运行,
可参考: Python通过PyInstaller 将DLL文件直接打包进exe,


博主热门文章推荐:

在这里插入图片描述

一篇读懂系列:

LoRa Mesh系列:

网络安全系列:

嵌入式开发系列:

AI / 机器学习系列:


猜你喜欢

转载自blog.csdn.net/HowieXue/article/details/129372173
今日推荐