2017-06-30 90 views
3

我已成功安裝Emscripten並使其在Ubuntu 16.04虛擬機上運行。我也成功地將helloworld.c文件轉換爲Web程序集。目前,我試圖用emscripten將python轉換爲web程序集。問題是emscripten目前不支持python,所以爲了解決這個問題,我試圖用Cython將python代碼轉換爲C,我成功地做了這些。儘管在嘗試將cython c文件轉換爲Web程序集時出現錯誤。這裏是控制檯日誌:將C代碼轉換爲Web程序集時出錯

$emcc pony_gp.c -o pony_gp.html 

In file included from pony_gp.c:11: 
In file included from /usr/include/python2.7/Python.h:58: 
/usr/include/python2.7/pyport.h:886:2: error: "LONG_BIT definition appears 
wrong for platform (bad gcc/glibc config?)." 
#error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)." 
ERROR:root:compiler frontend failed to generate LLVM bitcode, halting 

根據pyport.h,生成此錯誤,因爲在一些32位系統LONG_BIT被錯誤定義爲64時,它應該是32。我試圖註釋出這條線,但這隻允許程序靜靜地運行,最終不會產生任何web彙編代碼,只能使用html和javascript。

我已閱讀here,這個問題是因爲「CMake的是拿起蟒蛇dylib的一個版本和Python的頭一個單獨的版本」。這很有意義,因爲我最近從Python 2.7.13-1降級到Python 2.7.11-1,因爲Python 2.7.13-1與python-dev軟件包不兼容。雖然,我不知道我會如何解決這個問題。

有沒有人有什麼想法做什麼?

+1

如果你發佈Python代碼和將其轉換爲用Cython的步驟將是有益的。這會增加你獲得答案的機會。 –

回答

1

雖然不是一個完整的答案,則應該能夠直接使用鐺,優選地設置有Emscripten相同鐺,例如編譯pony_gp.c到LLVM(.ll):

source ~/emsdk/emsdk_env.sh 
cython hello.py 
clang `python2-config --cflags` -S -emit-llvm hello.c 

然後,生成的。 ll文件可以直接送到Emscripten。

對於生產配套工作的Python - > WebAssembly你應該還需要對Python運行時鏈接 - 您可以使用一個與EMCC分佈式這已經編譯成字節碼LLVM(.BC),emsdk/emscripten/incoming/tests/python/python.bc

此外,這可能會有所幫助:https://github.com/dgym/cpython-emscripten