Windows下Godot引入依赖外部DLL的Rust库报错126如何解决?
Godot + Rust 调用DLL报错Error 126解决方案
问题根因
Windows系统动态库加载逻辑和Linux存在差异,Error 126表示加载目标DLL时,其链式依赖中的某个库未被系统找到,并非你引用的dylib.dll本身缺失。
排查步骤
1. 检查完整依赖链
使用Visual Studio自带的dumpbin工具查看所有依赖项,确认没有缺失的库:
# 查看你的Rust编译的dylib.dll的所有依赖 dumpbin /dependents project/libs/dylib.dll # 查看GameNetworkingSockets.dll的所有依赖 dumpbin /dependents project/libs/GameNetworkingSockets.dll
重点检查是否存在未随程序分发的依赖,比如vcpkg编译生成的其他动态库、VC++运行时库、加密库等,所有输出的依赖DLL都需要和你的程序放在一起。
2. 修正DLL存放路径
Windows默认不会在DLL所在的子目录下搜索其依赖,Godot运行时的默认搜索顺序为:
- Godot编辑器/导出程序的所在目录
- 系统
C:\Windows\System32目录 - 环境变量
PATH中配置的目录 - 进程当前工作目录(编辑器运行时为项目根目录,即
project.godot文件所在目录)
你将DLL放在project/libs子目录下时,Godot可以通过配置的GDNative路径找到dylib.dll,但dylib.dll加载GNS的DLL时,系统无法定位到libs子目录下的文件,解决方案二选一: - 把所有依赖的DLL(dylib.dll、GameNetworkingSockets.dll及其所有依赖)统一放在项目根目录下,不要放在子目录
- 添加自动加载脚本,在GDNative库加载前将libs目录加入系统PATH,脚本优先级设为最高:
extends Node func _ready(): var lib_abs_path = OS.get_executable_path().get_base_dir().path_join("libs") OS.set_environment("PATH", OS.get_environment("PATH") + ";" + lib_abs_path)
3. 验证编译架构匹配
确认以下组件的架构完全一致,架构不匹配也会触发Error 126:
- Rust工具链架构:你使用的是
nightly-x86_64-pc-windows-msvc,对应64位 - GameNetworkingSockets编译架构:vcpkg编译时选择的是
x64-windows而非x86-windows - Godot编辑器/导出程序架构:使用64位版本,不要用32位版本
4. 检查VC++运行时依赖
vcpkg默认动态链接VC运行时,若目标设备未安装对应版本的Visual C Redistributable包,也会出现依赖缺失,可选择:
- 安装对应版本的VC++运行时包
- 编译GNS时选择静态链接CRT,或随程序分发对应版本的
vcruntime140.dll、msvcp140.dll等运行时库
内容的提问来源于stack exchange,提问作者Modamog
相关产品推荐
相关产品推荐

