簡體   English   中英

將C代碼轉換為Web程序集時出錯

[英]Error when converting C code to Web Assembly

我已經成功安裝了Emscripten並讓它在Ubuntu 16.04虛擬機上運行。 我還成功將helloworld.c文件轉換為Web程序集。 目前,我正在嘗試使用emscripten將python轉換為Web程序集。 問題是emscripten當前不支持python,所以作為一個解決方法,我試圖用Cython將python代碼轉換為C,這是我成功完成的。 雖然我在嘗試將cython 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。

我在這里讀到,問題是因為“cmake正在為標題拾取一個版本的python dylib和一個單獨版本的python”。 這是有道理的,因為我最近從Python 2.7.13-1降級到Python 2.7.11-1,因為Python 2.7.13-1與python-dev軟件包不兼容。 雖然,我不知道如何解決這個問題。

有誰知道該怎么辦?

雖然不是完整的答案,但您應該能夠使用clang將pony_gp.c直接編譯為LLVM(.ll),最好是與Emscripten一起提供的相同的clang,例如:

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

然后,生成的.ll文件可以直接提供給Emscripten。

為了生成一個完全可用的Python - > WebAssembly,您可能還需要鏈接到Python運行時 - 您可以使用已經編譯為LLVM字節碼(.bc)的emsdk/emscripten/incoming/tests/python/python.bc那個, emsdk/emscripten/incoming/tests/python/python.bc

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM