5

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と、期待される出力が得られます

>>> ./a.out
>>> Hello world

hello.c次はemscriptenを使って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.jsnode.jsで実行しようとするファイルを生成します

>>> node a.out.js

参照エラーが発生する

>>> ReferenceError: _Py_SetProgramName is not defined

生成されたjavascriptを少し変更してみましたが、基本的に全ての_Py_関数が定義されていないと思います。

誰かがこれについて何か経験がありますか、または提案された修正はありますか?

4

2 に答える 2

2

emccそれを機能させるには、適切なライブラリを処理できるコードにコンパイルするために、Python 全体を JavaScript にコンパイルする必要があると思いますnode.js。それ以外の場合、バイナリ ライブラリはそのまま残ります。それを混ぜることはできません。

実際emccには、注意して読むと警告が表示されます。

cross-compile独自のスクリプトをコンパイルする前に、Python を JavaScript に変換する方法を知る必要があります。repl.itで見たので、これはすでに行われています。

于 2013-06-12T11:25:18.807 に答える