[已解决] 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 / 机器学习系列:


  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
当在vscode中运行Python代码时出现ImportError: DLL load failed: 找不到指定的模块的错误,通常是由于缺少所需的库或模块导致的。根据引用和引用[2]的描述,出现这个错误的原因可能是缺少了OpenCV库或scikit-image库。而根据引用的描述,您在创建虚拟环境时可能没有正确地安装numpy库。 解决这个问题的方法是确保您安装了所需的库,并且路径配置正确。首先,您可以尝试使用pip命令或conda命令重新安装OpenCV库和scikit-image库,确保安装的版本与您的Python环境兼容。例如,使用以下命令安装OpenCV库: pip install opencv-python 然后,您可以使用以下命令安装scikit-image库: pip install scikit-image 接下来,您需要检查您的Python环境变量是否正确设置。确保将Python及其相关的库的路径添加到系统的环境变量中。您可以通过在命令提示符下运行以下命令来检查Python路径: python -c "import sys; print(sys.path)" 如果您发现路径不正确或缺少所需的库路径,您可以通过编辑环境变量来添加正确的路径。 最后,您还可以尝试重新启动vscode,然后再次运行您的代码,看看问题是否得到解决。 总结起来,解决vscode运行Python代码时出现ImportError: DLL load failed: 找不到指定的模块的错误,您可以尝试以下步骤: 1. 使用pip或conda重新安装缺少的库,比如OpenCV和scikit-image。 2. 检查Python环境变量是否正确设置,并添加所需库的路径。 3. 重新启动vscode并再次运行代码。 希望这些步骤能够帮助您解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python ImportError: DLL load failed while import cv2: 找不到指定的模块。](https://download.csdn.net/download/zz975896590/85710278)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [运行 skimage 报错ImportError: DLL load failed:找不到指定模块](https://blog.csdn.net/fanlily913/article/details/120130357)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vscode虚拟环境运行文件报错ImportError: DLL load failed: 找不到指定的模块的问题](https://blog.csdn.net/yukiter1221/article/details/123193245)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HowieXue

求打赏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值