使用MSYS2编译的嵌入式Python C程序在Windows原生环境找不到libpython3.dll
解决MSYS2编译的Python嵌入C程序在Windows原生环境找不到libpython3.dll的问题
问题原因
MSYS2 Shell会自动配置其自带库的搜索路径,但Windows原生CMD/PowerShell没有这个默认配置,导致程序无法定位libpython3.dll。以下是几种通过环境设置或代码调整解决的方案:
方案1:临时设置原生Shell的PATH环境变量
运行程序前,手动把MSYS2的Python DLL所在目录添加到系统PATH中:
- CMD环境:
set PATH=C:\msys64\mingw32\bin;%PATH% - PowerShell环境:
$env:PATH = "C:\msys64\mingw32\bin;" + $env:PATH
执行完上述命令后,直接运行你的可执行程序即可。
方案2:永久添加PATH系统环境变量
如果需要长期支持原生环境运行,可将DLL目录加入系统PATH:
- 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」
- 在「系统变量」区域找到
PATH,点击「编辑」 - 添加新路径:
C:\msys64\mingw32\bin - 依次点击「确定」保存设置,重启Shell或电脑后生效。
方案3:修正代码中的DLL路径配置
检查并修复代码中的变量名错误和逻辑顺序问题:
- 变量名拼写修正:你定义了
dllDirectory=c:/msys64/mingw32/bin,但调用AddDllDirectory(msys2Path);,这里msys2Path未定义,应改为AddDllDirectory(dllDirectory);;同理pythonEnv应对应pythonpath_env变量。 - 调整Python初始化顺序:
PyConfig_Read应在Py_InitializeFromConfig之前执行,确保配置先被读取再初始化Python:// 初始化配置 PyConfig_InitPythonConfig(&config); // 设置home路径 status = PyConfig_SetString(&config, &config.home, msys2); if (PyStatus_Exception(status)) { printf("Fail set HOME\n"); goto exception; } // 设置platlibdir status = PyConfig_SetString(&config, &config.platlibdir, platlibdir); if (PyStatus_Exception(status)) { printf("Fail set platlibdir\n"); goto exception; } // 设置pythonpath_env status = PyConfig_SetString(&config, &config.pythonpath_env, pythonpath_env); if (PyStatus_Exception(status)) { printf("Fail set pythonpath_env\n"); goto exception; } // 先读取配置 status = PyConfig_Read(&config); if (PyStatus_Exception(status)) { goto exception; } // 再初始化Python status = Py_InitializeFromConfig(&config); if (PyStatus_Exception(status)) { goto exception; } - 验证AddDllDirectory调用:可添加错误检查确保路径被正确添加:
HANDLE dllDirHandle = AddDllDirectory(dllDirectory); if (!dllDirHandle) { printf("AddDllDirectory failed, error code: %d\n", GetLastError()); goto exception; }
方案4:编译时使用静态链接(彻底避免DLL依赖)
如果允许静态编译,可修改编译命令使用静态版Python库,生成的程序无需依赖外部DLL:
gcc test.c -IC:/msys64/mingw32/include/python3.11 -I. -LC:/msys64/mingw32/lib -lpython3.11-static -llibffi -D__TEST__
内容的提问来源于stack exchange,提问作者TaiJuWu
相关产品推荐
相关产品推荐

