2016-10-13 33 views
-1

我想實現這個頁面佈局的事情: https://blogs.msdn.microsoft.com/pythonengineering/2016/04/26/cpython-embeddable-zip-file/可以通過編譯python.exe沒有Visual Studio中,使用MinGW

我試圖編譯代碼僅僅是這樣的:

#include "Python.h" 

int 
wmain(int argc, wchar_t **argv) 
{ 
    return Py_Main(argc, argv); 
} 

在VisualStudio中15我要補充蟒蛇/包括並鏈接到該項目的蟒蛇庫目錄,並添加:

#include "stdafx.h" 

和T它編譯並工作正常。我只是好奇,是否可以用mingw或其他開源的C/C++編譯器來做到這一點?

如果我把一個文件my_python.cpp其中包含以下內容:

#include "include/Python.h" 

int 
wmain(int argc, wchar_t **argv) 
{ 
    return Py_Main(argc, argv); 
} 
在一個新的32位蟒蛇的根目錄

3.5安裝(Windows 7的64位),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 `[email protected]' 

任何方式來解決這個問題,把它運行沒有Visual Studio的?

回答

0

該錯誤與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的庫名稱。

+0

抱歉花了這麼長時間迴應。我確實嘗試了這個,並且得到了錯誤「undefined reference to _imp__Py_Main」,我認爲這與你對.a和.lib文件的評論有關,我使用pexports和dlltool來製作.a文件,但到目前爲止一直無法讓錯誤消失,如果我能弄明白,我會進一步更新 –

相關問題