可以在没有 Visual Studio 的情况下使用 MinGw 编译 python.exe

Posted

技术标签:

【中文标题】可以在没有 Visual Studio 的情况下使用 MinGw 编译 python.exe【英文标题】:possible to compile python.exe without Visual Studio, with MinGw 【发布时间】:2016-10-13 18:46:03 【问题描述】:

我正在尝试实现此页面上列出的内容: 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 libs 目录,并添加:

#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 的情况下运行?

【问题讨论】:

【参考方案1】:

该错误与 Python 无关。 wmain 是特定于 Visual Studio 的。 GCC 不将wmain 视为入口点,它只是作为一个永远不会被调用的函数坐在那里。

GCC 需要 mainWinMain 作为入口点。如果没有找到这些入口点,那么编译器会抱怨。所以让我们使用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 扩展名的库名称。

【讨论】:

抱歉这么久才回复。我确实尝试过,并且收到错误“未定义对`_imp__Py_Main'的引用。我认为这与您对.a 与.lib 文件的评论有关。我使用pexports 和dlltool 制作.a 文件,但到目前为止一直无法让错误消失。如果我能弄清楚,我会进一步更新

以上是关于可以在没有 Visual Studio 的情况下使用 MinGw 编译 python.exe的主要内容,如果未能解决你的问题,请参考以下文章

可以在没有 Visual Studio 的情况下使用 MinGw 编译 python.exe

我可以在没有提升权限的情况下从 Visual Studio 运行程序吗?

我可以在没有 Visual Studio 的情况下使用 SQL Server Compact Edition 3.5

在没有 Visual Studio 的情况下使用 C++ 安装 Opencv

我可以在没有 Visual Studio 的情况下开发 .net 项目吗,如果可以,.net 框架是成本还是免费软件 [重复]

如何在没有 CMake 的情况下使用 Visual Studio 2013 设置 Dlib?