問題タブ [emscripten]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2453 参照

javascript - Emscripten - Module.cwrap を使用して c 関数によって設定された配列値を取得する

emscripten を介して javascript にコンパイルされた "little c" ライブラリがあります。c ライブラリの多くの関数は、渡された配列を変更します。JavaScript レベルからこれらの配列にアクセスするメカニズムが何であるかは明らかではありません。

Module.cwrap正しくエクスポートされた関数 (例: ) の使用と呼び出しEXPORTED_FUNCTIONS="['_myFunc']は簡単ですが、c 側で計算された変数への唯一のアクセスは、この関数からの戻りにあるようです。c 側から配列へのポインターを返す場合、javascript 側から配列にアクセスする方法は明らかではありません。

Module.cwrapreturnTypeを指定arrayすると、呼び出された c 関数はどのように配列を返すでしょうか?

0 投票する
2 に答える
15194 参照

javascript - emscriptenコンパイル済みコードへの配列ポインタの受け渡し/返却を処理する方法は?

Windows 7 環境から、emcc を使用して、配列を受け入れて変更する単純な C プログラムをコンパイルしました (以下を参照)。

emcc の -o オプションを使用して、ブラウザ (Chrome) にロードした .html ファイルを生成しました。

ロードすると、ブラウザ ウィンドウ内で生成される出力が期待どおりであることがわかります (以下を参照)。

ただし、javascript コンソール経由で module.cwrap() コマンドを使用し、関数を直接 (main() の外で) 呼び出そうとすると、

ブラウザに次のものが生成/表示されているのを見ていますが、これは私が期待するものではありません。

次の質問があります。

  1. Module.cwrap() への呼び出しで、戻り値の型とパラメーター リストの正しい構文を使用していますか? 非ポインター変数を int_sqrt() ルーチンに渡す方法を扱うチュートリアルの「コードとの対話」セクションで、int_sqrt() の単純でわかりやすい例を正常に実行できました。

  2. emscripten で生成された JavaScript コードに配列やポインタが渡される (または返される) ときに何か違うことが起こっていますか?

  3. 関数 displayArray() のブラウザーで生成された出力は、main() から呼び出されたときに (期待どおりに) 機能します。JavaScriptコンソール経由ではありませんか?

0 投票する
1 に答える
2287 参照

emscripten - 型付き配列を返すようにasm.jsを取得しようとしています

emscripten を使用して Javascript を生成していますが、型付き配列を返す関数を取得する方法を見つけようとしていました。私が返そうとしている配列は静的な長さですが、ポインターベースの戻り値の型が JS ランドでどのように扱われるかについて少し混乱しています。

この種のラッパーは物事を行う方法ですか: javascript から Emscripten 型付き配列にアクセスするにはどうすればよいですか?

どうもありがとう。

0 投票する
1 に答える
1165 参照

ubuntu-12.04 - emscripten セットアップのトラブル

emscriptenをセットアップしようとしています。だから、私はこの指示に従いました。

この行でバージョンを確認しました:

node --version->v0.10.15

python --version->Python 2.7.3

LLVM と Clang はインストールされていません。だから、私はこの方法でそれらをインストールします:

次に、それらのバージョンを確認しています。

llvm-config --version->3.2

clang --version->

次に、次のコマンドで emscripten をダウンロードします。

git clone git://github.com/kripken/emscripten.git ~/emscripten(チュートリアルでは次のように)

emscripten ディレクトリに入る:cd ~/emscripten

また、私はこれに従いました:

出力はhello, world!両方のコマンドにあります。

次に、最初に emcc を起動します。

./emcc(チュートリアルでは次のように)

出力:

これらのパスをチェックして、それらが正しいことを確認します。

/usr/bin/python2 --version->Python 2.7.3

/usr/bin/node --version->v0.10.15

/usr/bin/llvm-config --version->3.2

大丈夫そうです。ここで、チュートリアルから例をコンパイルしてみます。

構築例 1:

出力: '' (何もない) 実行例 1:

出力:hello, world!

ビルド例 2 (HTML の生成):

出力:

「hello.html」が作成されていません! 私が間違っていることは何ですか?

追加情報:

これを Google で検索しましたが、解決策が役に立ちません。(より多くの異なるエラーとより多くの苦痛)

0 投票する
1 に答える
999 参照

javascript - Emscripten: プロンプトをコンソールに置き換えます (ある種の)

私は (インタラクティブ - Python シェルのような) C++ コンソール アプリケーションを持っていて、Emscripten で遊んでいました (C++ から JS にトランスコンパイルするため)。すべては順調ですが、JS のフォーカスを盗むプロンプトを、それほど風変わりなものに置き換えてほしいと思います。

私が試したこと: 生成された html に入力テキストエリアとボタンを追加し、プロンプト呼び出し行を while ループ (ユーザーがボタンを押すまでループ) に置き換えました。これはあまりうまくいきませんでした。空のループがブラウザーをフリーズさせました (これはおそらく予期されていることですが、JS にはスリープ機能がありません)。

つまり、要するに、私が欲しいのはこのレイアウトです:

と動作:

(emccの)生成されたJSコードを変更することでこれを達成する簡単な方法はありますか? ((私の)元のコードを変更することでこれを達成する方法を考えていますが、可能であればそれを避けたいです)