gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:37:19 31 4
gpt4 key购买 nike

我正在努力实现本页上列出的目标: 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 的情况下运行吗?

最佳答案

该错误与 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 扩展名的库名称。

关于python - 可以在没有 Visual Studio 的情况下使用 MinGw 编译 python.exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40028671/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com