[英]Compiling Oniguruma regex library to javascript using Emscripten
[英]Compiling trivial python program to javascript using cython and emscripten on mac
我正在嘗試使用 cython 和 emscripten 從 python 生成 javascript。
hello.py
:
print 'Hello world.'
然后我使用 cython 將其編譯為 c
>>> cython --embed hello.py -v
這會生成一個hello.c
文件,我用它編譯
>>> gcc hello.c -I/usr/include/python2.7/ -lpython2.7
這適用於 gcc 或 clang。 當我執行./a.out
時,我得到了預期的 output
>>> ./a.out
>>> Hello world
接下來我想使用 emscripten 編譯hello.c
到 javascript
>>> emcc hello.c -I/usr/include/python2.7/ -lpython2.7
我明白了
>>> WARNING emcc: -I or -L of an absolute path encountered.
>>> If this is to a local system header/library, it may cause problems
>>> (local system files make sense for compiling natively on your system,
>>> but not necessarily to JavaScript)
>>> clang: warning: argument unused during compilation: '-nostdinc++'
它仍然會生成一個a.out.js
文件,我嘗試在 node.js 中運行該文件
>>> node a.out.js
我收到參考錯誤
>>> ReferenceError: _Py_SetProgramName is not defined
我嘗試稍微更改生成的 javscript,但基本上我認為所有_Py_
函數都沒有定義。
有沒有人有這方面的經驗,或任何建議的修復?
您還需要將embedabble python庫-lpython2.7
編譯為javacsript,以便它可用於您的javacsript程序。
值得慶幸的是,這項工作已經在empythoned中完成。 這提供了一個嵌入式python編譯為Javascript。
您應該能夠使用empythoned來提供缺少的_Py_SetProgramName
為了使它工作,我認為你需要由emcc
編譯為JavaScript的整個Python,以便將正確的庫編譯成node.js
可以處理的代碼。 否則你保持完整的二進制庫。 你不能混合它。
事實上,如果您仔細閱讀, emcc
會通過警告通知您。
在編譯自己的腳本之前,您需要了解如何將Python cross-compile
為javascript。 這已經完成了,因為我在repl.it上看到了它。
Pyodide 終於(多年后)妥善解決了這個問題。 請參閱https://pyodide.org/en/stable/ Pyodide的許多組件部分使用 Cython 編寫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.