调用Python C/API的DLL存在依赖问题,加载时报WinError126求助
WinError 126本质上就是系统在加载你的NASM DLL时,找不到它依赖的某个动态库——结合你的场景(NASM DLL → 依赖Python C/API的C DLL → Python运行时),咱们一步步排查:
确认Python运行时DLL的位置
你的C DLL依赖Python C/API,所以必须让系统能找到对应的pythonXX.dll(比如python310.dll,XX是你使用的Python版本号)。最快的解决办法是把Python安装目录下的这个DLL复制到你的NASM DLL和C DLL所在的文件夹中,或者把Python的安装路径(例如C:\Python310)添加到系统的PATH环境变量里。检查C DLL的放置位置
你的NASM DLL需要调用那个C DLL,所以这个C DLL必须和NASM DLL在同一个目录下,或者位于系统PATH所包含的路径中。如果把C DLL随便放在某个未被系统搜索的文件夹,自然会触发126错误。验证VC++运行时依赖
如果你的C DLL是用Visual Studio编译的,它大概率依赖VC运行时库(比如vcruntime140.dll)。你可以安装对应版本的64位VC Redistributable,或者把编译时生成的运行时DLL复制到你的DLL目录中。用工具精准排查缺失的依赖
要是上面的步骤都没解决问题,直接用工具揪出根源:- 使用Visual Studio自带的
dumpbin命令,在VS开发者命令提示符中运行:
这个命令会列出NASM DLL的所有依赖项,你可以逐个检查哪些DLL无法被系统找到。dumpbin /dependents YourNASMDLL.dll - 或者使用Dependency Walker(depends.exe),将你的NASM DLL拖入工具中,它会直观地显示出缺失的依赖库。
- 使用Visual Studio自带的
最后确认位数一致性
虽然你提到所有组件都是64位,但还是再核对一遍:Python是64位版本、C DLL是64位编译、NASM编译的是64位DLL、Visual Studio的调试环境也是64位——任何一个环节是32位都会导致加载失败。
内容的提问来源于stack exchange,提问作者RTC222

