問題タブ [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.
c++ - Emscripten で使用する C++ マングリング名
emscripten を使用して、単純な HelloWorld プログラムを C++ から Javascript にコンパイルしようとしています。マルチ関数などを呼び出すメイン関数を含めると、正常に動作します。これが私のコードです(HelloWorld.cpp)。
ただし、メイン関数を含めない場合、emcc コンパイルは常に出力します
エラー ルート: 処理する機能がありません。LLVM がそれらをデッドとして排除しないようにしてください (必要に応じて EXPORTED_FUNCTIONS を使用してください。FAQ を参照してください)。
どの関数をコンパイル .js ファイルに含める必要があるかを示す「EXPORTED_FUNCTIONS」オプションについて知っています。私はさまざまなことを試しました:
マングリング名を使用すると、これを理解している限り、名前は「_multi_d10HelloWorldd」である必要があります。また、クラス名と他のいくつかの組み合わせなしで試しました。
修飾子 EXPORT_ALL の使用
私が何をしても、関数は最終的な js ファイルに含まれません。
EMCC FAQから理解していることから、 EXPORTED_FUNCTIONSを使用する必要があるため、後で同じメソッド名を使用せずに JS から「sayHello」などの目的の関数を呼び出すことができます。そして、これはまさに私が後で行う必要があることです。
誰かが私が考えていなかったかもしれない解決策または他の可能なオプションを教えてもらえますか?
私が考えたマングリング名は正しいですか?
javascript - AssertionError: asm.js には -O1 以上が必要です
asm.js を開始したところ、ある時点でスタックしました。私はすでにemscripten、clang、node jsをインストールしており、私のcプログラムもこのコマンドでemscriptenで正常に動作しています:
./emcc hello_world.c
./emcc hello_world.c -o hello_world.html
しかし、このファイルを asm で実行しようとすると、次のコマンドで挿入エラーが表示されます。
./emcc -01 -s ASM_JS=1 hello_world.c
では、このエラーを解決するにはどうすればよいですか?
、前もって感謝します
c++ - 二重比較関数 'IsAlmostEqual' のコンパイル時の Emscripten エラー
私は emscripten を使用する初心者で、cpp ファイルのコンパイル中にエラーが発生しました。
私はiae.cppを持っています:
emscripten を使用してコンパイルしようとしました:
emcc iae.cpp
ただし、次の警告とエラーが生成されます。
これらの警告とエラーを取り除く方法と、IsAlmostEqual()
emscripten を使用してコンパイルすることさえ可能ですか?
compilation - Emscriptem がサンプルのビルドに失敗し、/usr/bin/opt が必要です
ここの手順を使用して Emscripten をインストールしましたが、13.10 ではいくつかの違いがあります。
clang 3.2 をコンパイルしてセットアップする代わりに、3.2 であるためリポジトリからインストールします。(clang --version
予想される出力を示します)
コンパイラが見つからなかったため、llvm をリンクしました。
しかし、~/.emscripten にそのディレクトリが記載されていないにもかかわらず、/usr/bin/opt が存在しないというエラーが表示されるようになりました。
javascript - emscriptenでBox2Dからのボディのリストをどのように反復しますか?
ここから Box2D の emscripten ポートを使用しています: https://github.com/kripken/box2d.js
うまく機能していますが、emscripten とのやり取りに問題があります。
具体的には、次のようなループでモデルと表示の同期を実行しています。
...しかし、それはうまくいかないようです。C++ コードは body オブジェクトのリンクされたリストの最後で NULL を返しますが、body.GetNext() (cpp の戻り値の型は b2Body *) がネイティブ JavaScript の null になることはありません。
私も試しました:
しかし、それも決して真実ではありません。私は、emscripten がラップされたポインターを返していると推測しています。「nullness」をテストするには、特定の操作を行う必要があります。
返されたオブジェクトを調べると、null 値の「ポインター」値がゼロであることがわかり、次のように動作させることができます。
したがって、NULL 性をテストすることは明らかに可能ですが、その方法に関するドキュメントは見つかりません。
c++ - シンプルな emscripten ループが実行に失敗する
emscripten の次の C++ コードがあります。
次に、次のコマンドでこれをコンパイルします。
コンパイルは問題なく実行されますが、何らかの理由で出力が得られません(つまり、"Hello World!" でさえありません)。私が見落としている単純なものはありますか?
SDK のバージョンは 1.8.2 です
編集
私はそれを機能させました.何らかの理由で、printfはその後に改行を入れた場合にのみ機能するようです.
c++ - emscripten を使用してビットマップ バッファを HTML5 キャンバスにレンダリングする
仮想フレームバッファにレンダリングする、何年も前に書かれた小さなゲームがあります。ターゲット プラットフォームで、最終バッファーをビットマップにブリットし、最終的にフレームをレンダリングします。これは、Wolf3D やその他の古いゲームが行うことと似ています。
ゲーム バッファを HTML5 キャンバスにレンダリングする方法はありますか? emscripten が SDL を使用していることは知っていますが、単純な 2D ゲームであるため、WebGL の使用を強制したくありません。
javascript - emscripten を介して C++ と JavaScript の間で文字列を渡す方法
私は emscripten を学んでいますが、C++ と JS の間で文字列を渡すときに、最も基本的な文字列操作を行うことさえできません。
たとえば、文字列の長さ関数を書きたいと思います。C++ の場合:
次のように JavaScript から呼び出されます。
これは0
私にとって有益です。これを期待どおりに機能させるにはどうすればよいですか? ここではどの文字列型を使用すればよいですか? char const*
? std::wstring
? std::string
? どれも機能していないようです。私はいつもかなりランダムな値を取得します。
これはほんの始まりにすぎません...どうすればこのようにC++から文字列を返すことができますか?
そしてJSで:
繰り返しますが、これを機能させる方法が見つかりません。私はいつもJSでゴミを手に入れます。
したがって、私の質問は明確です: Emscripten を介して JS と C++ の間で文字列型をマーシャリングするにはどうすればよいですか?
cmake - win で clang/LLVM をコンパイルするとコンパイル エラーが発生する - 修正方法は?
Visual Studio 2010 セットアップで Emscripten をセットアップするために、Win 7 64 ビット マシンに clang/LLVM をインストールする際に問題が発生しました。Emscripten のhttps://github.com/kripken/emscripten/wiki/Using-Emscripten-on-Windowsの公式ハウツーに従っていたところ、clang/LLVM の必要なコンパイルに関する問題に遭遇しました。
svn co http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_32/final llvm
cd llvm\tools
svn co http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_32/final clang
cd ..\\..
mkdir build
cmake -G "Visual Studio 10" ..\llvm
msbuild LLVM.sln /p:Configuration=Release
その結果、次のような多くのエラーが発生します。
CUSTOMBUILD : エラー : '10.0\VC\bin\llvm\tools\clang\test\Index\ pch-opaque-value.cpp' の読み取りエラー [c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\b in \build\tools\clang\test\check-clang.vcxproj] CUSTOMBUILD: エラー: '10.0\VC\bin\llvm\tools\clang\test\Index\ pch-with-errors.m' [c:\プログラム ファイル (x86)\Microsoft Visual Studio 10.0\VC\bin\ build\tools\clang\test\check-clang.vcxproj]
明らかに、「10.0\VC...」で始まるパスは完全に無効です..その前に「C:\Program Files (x86)\Microsoft Visual Studio」がありません..(次のようなファイルがあることを確認しましたそれは test\Index\ にあります - そうです!
私の質問は次のとおりです。どうすれば修正できますか? a) 「C:\folder\MS Visual」(スペースを含む) のような追加のインクルード パスを設定できますか?
これまでに試したこと: a) Visual Studio Prompt と通常の Prompt から実行する。デフォルトおよびカスタムの場所の使用。b) MSBUILD のように実行する
msbuild LLVM.sln /p:Configuration=Release /p:"VCBuildAdditionalOptions= C:\Program Files (x86)\Microsoft Visual Studio " c) PATH/Systemroot を変更しようとしています..不明な理由で、その間にシステムルートを破棄しました (それは「C:\Program」のような間違ったパスについて苦情を言い、明らかにそれを消去しました)。
私は真剣に立ち往生しており、これらの手順以外はわかりません。インクルードパスの設定は役に立たないようです-CMAKEのものにスペースの問題や何が起こっているのか疑問に思っています.
Emscripten とおそらく LLVM の作成者は、Windows サポートを「実験的」と呼んでいるため、後で Visual Studio 2010 (2012 ではなく..) で使用するために LLVM/clang をセットアップしようとして問題を抱えているのは私だけではありません。書式設定が悪くて申し訳ありません。何らかの理由で、今日はきれいな書式設定が許可されません。ただし、ナイトリー ブラウザ ビルドを使用しています。