ffi Error:Dynamic Linking Error:Win32 error 126

Electron应用打包后在某些电脑上ffi/ffi-napi 报 Dynamic Linking Error:Win32 error 126 错误


开发的 Electron 程序在大多数电脑上都是正常使用,但是同样的安装包最近在国外客户的电脑上频频出现白屏问题。通过远程调试后发现,在国外客户的电脑上,ffi / ffi-napi 一直报 Dynamic Linking Error:Win32 error 126 的错误。

这个错误的原因在网上普遍说的是因为引用的 dll 路径问题,根据传递的路径找不到相应的文件,但是通过调试,发现引用 dll 的路径是没有问题的,百思不得其解。

在解决一个客户问题时,通过升级Electron版本,搞系统预设环境,稀里糊涂的就给搞好,具体原因当时不太清楚,以为是升级了Electron版本就可以了,然而没过两周,又有客户用新包也不行,没办法,只能重复搞系统预设环境。

上个预设环境是在 Node 官网下载 Node,不小心下了源码,编译 Node 期间搞好的,这次想的是先找到缺少的环境,实在走不通了再重新编译 Node ,虽然编译时代码在屏幕上刷刷刷的上滚很酷炫,但是总不能每次都远程给客户搞吧,要累死了。

通过Google了解,可能是引用的 dll 中引用了依赖 dll,所以找不到相关文件,找了 dll 的开发小姐姐,要来了相关依赖环境重新打包,结果还是没用,通过 C++ 的一个依赖文件检测工具发现使用的dll的依赖包在电脑上并不缺失,好吧,打算继续编译 Node 了。

百般无聊中,发现了相关搜索内容中,有一篇博客写了相关内容,其中有个步骤是安装 C++ 的构建工具,死马当活马医吧,执行了博客中的命令,然后,好了。。。

解决方案

  1. 安装 Node.js
  2. 通过管理员权限,打开 CMD 或 PowerShell
  3. 执行 npm install --global --production windows-build-tools

这不是一个很好的解决方案,问题核心应该是国外电脑的 C++ 构建工具中缺失,导致电脑的某些环境未安装,用此方法需要先安装 Node.js ,然后再执行相关命令,对于非专业人员,太过复杂。但是如果直接安装 C++ 构建工具,好像需要安装 VS,两者相比取其轻,暂时先用 Node 吧,能做的也就让用户手动安装 Node ,再提供个脚本一键执行后续所有操作吧。

国内用户在通过 npm 安装这个的时候,可能会因为网络问题安装不成功,不过国内用户很少出现因为这个问题导致的白屏问题。后面继续优化吧。

鸣谢:

关于在electron中调用C++动态库的经验总结

2022年10月21日 更新

上述解决问题的方案有歧义,已通过其他方式彻底解决该问题

  1. electron 打包时,需要将使用的 dll 文件移动到指定目录下,build 配置字段为 extraResources、extraFiles;具体配置去看官方文档
  2. 在使用 dll 时,获取绝对路径,根据开发环境和生产环境,获得不同的路径。通过在 process.env.PATH 环境变量上追加 dll 的绝对路径的文件目录(不包含dll名称),进行下一步。
  3. 引用 dll 时只使用 dll 名称,不通过路径引入。let dll = ffi.Library(“dllName”,{…})
  4. 获取 dll 后将环境变量的值进行恢复。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值