如何在Windows 10下编译嵌入Python的C++程序
在Windows 10下用MinGW编译嵌入Python的C++程序解决链接错误
问题根源
你碰到的是链接器错误——编译时只处理了C++源文件,但没告诉编译器Python头文件的位置,也没链接Python的库文件,导致链接器找不到Py_DecodeLocale、Py_Initialize这些Python API的实现代码。
修复方案
1. 修正代码中的Python.h引用
把代码里的绝对路径引用改成标准形式,后续通过编译参数指定头文件位置更规范:
#define PY_SSIZE_T_CLEAN // 替换原有的绝对路径include #include <Python.h> #include <cstdio> #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char const *argv[]) { wchar_t *program = Py_DecodeLocale(argv[0], nullptr); if (program == nullptr) { cerr << "Failed to decode argv[0]" << endl; exit(1); } Py_SetProgramName(program); Py_Initialize(); PyRun_SimpleString("print('Hello World')"); // 顺便修正拼写错误:Hellow → Hello if (Py_FinalizeEx() < 0) { cerr << "Failed to finalize" << endl; exit(120); } PyMem_RawFree(program); return 0; }
2. 修改VS Code的编译任务(tasks.json)
点击VS Code左侧「运行和调试」面板,或者直接打开项目下的.vscode/tasks.json,修改编译命令的参数,添加Python的头文件路径、库路径和链接库:
{ "version": "2.0.0", "tasks": [ { "type": "cppbuild", "label": "C/C++: g++.exe 生成活动文件", "command": "C:\\msys64\\mingw64\\bin\\g++.exe", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe", // 指定Python头文件目录 "-IC:\\Users\\super\\AppData\\Local\\Programs\\Python\\Python310\\include", // 指定Python库文件目录 "-LC:\\Users\\super\\AppData\\Local\\Programs\\Python\\Python310\\libs", // 链接Python310库 "-lpython310" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "编译器: C:\\msys64\\mingw64\\bin\\g++.exe" } ] }
3. 关键注意事项
- 必须保证你安装的Python是64位版本,和你使用的MinGW(x86_64)位数完全一致,否则会出现链接或运行时错误。
- 编译完成后运行程序时,需要确保
python310.dll能被程序找到:要么把这个dll从Python安装目录复制到你的C++程序所在文件夹,要么把Python的安装根目录(比如C:\Users\super\AppData\Local\Programs\Python\Python310)添加到系统环境变量PATH中。
内容的提问来源于stack exchange,提问作者Noob Coder
相关产品推荐
相关产品推荐

