可以在没有Visual Studio的情况下使用MinGw编译python.exe
possible to compile python.exe without Visual Studio, with MinGw
我正在努力实现这一页上列出的事情:https://blogs.msdn.microsoft.com/pythonengineering/2016/04/26/cpython-embeddable-zip-file/
我要编译的代码是这样的:
#include "Python.h"
int
wmain(int argc, wchar_t **argv)
{
return Py_Main(argc, argv);
}
在VisualStudio 15中,我必须添加python/include和链接到项目中的python库目录,并添加:
#include "stdafx.h"
,然后编译并正常工作。我只是好奇,是否有可能做到这一点与mingw,或另一个开源的C/c++编译器?
如果我放置一个包含以下内容的文件my_python.cpp
:
#include "include/Python.h"
int
wmain(int argc, wchar_t **argv)
{
return Py_Main(argc, argv);
}
在新安装的32位python 3.5 (windows 7 x64)的根目录下,CD到该目录并尝试运行:
gcc my_python.cpp -Llibs -lpython35 -o my_python.exe
我得到这个错误:
c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to `WinMain@16'
有没有办法解决这个问题,让它在没有Visual Studio的情况下运行?
此错误与Python无关。wmain
是Visual Studio特有的。GCC不把wmain
当作入口点,它只是作为一个永远不会被调用的函数。
GCC要求main
或WinMain
作为入口点。如果这两个入口点都没有找到,编译器就会报错。所以我们就用main
作为切入点吧。
Py_Main
大概需要宽字符串输入。CommandLineToArgvW
将始终提供这一点。例子:
#include <Windows.h>
#include "include/Python.h"
int main()
{
int argc;
wchar_t** argv = CommandLineToArgvW( GetCommandLineW(), &argc );
return Py_Main(argc, argv);
}
如果您仍然得到相同的错误,只需提供WinMain
入口点以使其满意
#include <Windows.h>
#include "include/Python.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
int argc;
wchar_t** argv = CommandLineToArgvW( GetCommandLineW(), &argc );
return Py_Main(argc, argv);
}
还要注意,*.lib
文件通常用于Visual Studio。GCC版本期望库名扩展名为*.a
。
相关文章:
- 尝试在Windows上执行C++时出错(通过MinGW编译)
- 如何使用mingw编译C STD ::线程代码
- MinGW 编译的可执行文件与网络无法在 x64 系统上运行
- MinGW编译的exe-缺少libgcc_s_silj-1.dll
- 使用由 Mingw 5.3 编译的 boost ASIO 库使用 QT 时出错
- 如何在 Atom IDE 中使用 gpp-compiler 时更改 MinGW 编译的 exe 位置?
- mingw 编译错误:从 'FARPROC ' 到 'void*' 的转换无效,但 msvc 编译正常
- 使用 MinGW 编译具有网络代码的简单 C++ SFML 文件会引发错误"undefined reference to IpAddress"
- 使用 mingw 编译 opencv3.1
- libx264用mingw编译 - 缺少__umoddi3,__udivdi3,_fseeko64和____chkstk
- MinGW .h 编译文件不起作用:此文件的版本与您运行的 Windows 版本不兼容
- 尝试使用 MinGW 编译 Assembly + C++:ccqKAvXJ.o:main.cpp:(.text+0x18):对 'GetMagicNumber' 的未定义引用
- std::endl 导致使用 MinGW 编译的 Windows 8 崩溃
- 用mingw编译SDL2,使用崇高的文本2错误
- MinGW编译失败:我创建的头文件没有这样的文件或目录
- 获取记事本++以使用minGW编译和运行C++程序
- 使用小型转储和 GDB 分析崩溃,以便 mingw 编译的可执行文件
- 使用 MinGW 编译自动化代理
- 无法在Win7上使用MinGW编译RIES。
- Qt5:此代码使用msvc2012编译正常,但使用MinGW编译时出现错误..为什么?