使用MSYS2+CMake+Make构建Pybind11库后Python导入失败求助
问题原因与解决办法
错误原因
你用MSYS2的MinGW GCC编译生成的.pyd文件依赖MinGW的运行时动态库(比如libstdc++-6.dll、libgcc_s_seh-1.dll),但你运行的Python(大概率是Windows官方版)的环境PATH里没有这些库的路径,导致加载失败。另外,CMake可能默认关联了MSYS2内部的Python,和你外部运行的Python版本/环境不匹配也可能加剧这个问题。
解决办法
办法1:用MSYS2内置的Python运行脚本
打开MSYS2的MinGW64终端(不是MSYS终端),切换到.pyd和test.py所在的目录,直接执行:
python test.py
MSYS2的环境已经包含了MinGW运行时库的路径,能正常加载依赖。
办法2:添加MinGW路径到系统环境变量
找到你的MSYS2安装目录下的mingw64/bin路径(比如C:\msys64\mingw64\bin),将其添加到系统环境变量PATH中,然后重启命令提示符,再运行python test.py即可。
办法3:静态编译依赖库(推荐,生成独立可运行的pyd)
修改CMakeLists.txt,在pybind11_add_module语句后添加静态链接选项,让编译后的.pyd不依赖外部MinGW运行时库:
cmake_minimum_required(VERSION 3.3) project(example) find_package(Python COMPONENTS Interpreter Development) find_package(pybind11 CONFIG) pybind11_add_module(example example.cpp) # 添加静态链接选项 target_link_options(example PRIVATE -static-libgcc -static-libstdc++)
然后重新执行构建命令:
cd buildmingw cmake .. -G "MinGW Makefiles" mingw32-make
生成的新.pyd文件可以直接在Windows官方Python环境下运行。
额外注意
确保你运行的Python版本和CMake找到的Python版本一致(比如都是3.11),可以在MSYS2终端里用python --version查看内置Python版本,避免版本不兼容导致的问题。
内容的提问来源于stack exchange,提问作者flori10
相关产品推荐
相关产品推荐

