問題タブ [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.
ubuntu - UbuntuへのEmscriptenのインストール
UbuntuにEmscriptenをインストールしようとしていますが、Emscriptenの公式インストールガイドには、LinuxにEmscriptenをインストールするための手順が記載されていません。インストールガイドが提供しなければならない唯一のアドバイスは次のとおりです。
If you are on Linux, things should be very simple for you and there is no need for any additional guide.
EmscriptenリポジトリのREADME.mdファイルも読みましたが、Ubuntuの説明もありません。UbuntuでEmscriptenをセットアップするには、どのような手順に従う必要がありますか?
makefile - Emscripten sudo enmake を実行しても「許可が拒否されました」
私は emscripten で遊んでいますが、この紛らわしいメッセージが表示され続けます
しかし、使用してもsudo
同じエラーが発生します。
私はsudoerのリストに載っていて、ルートアクセス権があります...しかし、何をしても許可が拒否されます。何か案は?
javascript - Javascript/Jasmine: ReferenceError: 変数が見つかりません: Float64Array
私は Rails を使用していますが、javascript にはかなり慣れていませんJasmine
。状況は次のとおりです。
Viz.js
ソースで使用しています。これはGraphviz
JSにコンパイルされていますEmscripten
- 私は使用しています
jasmine-rails
jasmine
ブラウザから正常にビルド- ただし、
jasmine:headless
(Qt webdriverを使用しています(Qtバージョン4.8.1を使用しています))、次のエラーが発生します:ReferenceError: Can't find variable: Float64Array
だから私の質問: Qt にエラーがあると結論付けてもFloat64Array
いいですか? emscripten は厄介な仕事をしましたか? 回避策はありますか?
llvm - Emscripten でコンパイルした GMP lib を取得できません
Emscripten の最新バージョンでこちらの手順を試しました: https://github.com/kripken/gmp.js/blob/master/README.markdown
.a ファイルは正しく作成されているようです。次に、そのライブラリに対して(デバッグモードで)コンパイルしようとしましたが、うまくいくようです:
ただし、生成された Javascript を実行しようとすると、次のエラーが発生します。
Emscripten Google グループの Alon (Emscripten の作成者) は、関数が存在しないことを意味し、llvm-vm で確認すると、次のように表示されます。
だから私は完全に途方に暮れています!
通常のコンパイラでビルドする場合、ライブラリに対してテストをコンパイルすると問題なく動作することに注意してください。
編集:これでさらに進みました。この lib のバージョン 5.1.1 では、一般的な C コンパイルを行う新しい構成オプション '--dissable-assembly' が導入されました。
ここでの問題は、テストの実行中に停止しないことです。
gmp.h の LIKELY および UNLIKELY オプションを「無効」にすることをお勧めします。
https://github.com/kripken/gmp.js/blob/master/gmp-h.in
しかし、それらを「無効にする」方法がわかりません。通常は 0 または 1 のオプションがありますが、ここでは表示されません。この特定のオプションが何をするのかさえ理解できません。
ありがとう
マルコス
filesystems - Filesystem FS を使用した Emscripten
FS
Emscripten でをどのように使用するのか疑問に思っています。wiki に記載されていることはすべて実行したと思いますが、まだUncaught ReferenceError: FS is not defined
. 結果の *.js ファイルでリテラルを検索するFS
と、出現はありません。存在するはずだと思いました。
ここに私がこれまでに持っているコードがあります。
InfoMedia.cpp
でコンパイル
emcc -s EXPORTED_FUNCTIONS="['_int_sqrt']" InfoMedia.cpp -o InfoMedia.js
init_fs.js
example.html
これをクロムで実行した後、preRunが呼び出され、エラーが発生します。
さらに、コンパイル時にファイルを埋め込もうとすると
emcc -s EXPORTED_FUNCTIONS="['_int_sqrt']" --embed-file gizmo.webm InfoMedia.cpp -o InfoMedia.js
このエラーが発生しますUncaught TypeError: Object #<Object> has no method 'FS_createDataFile'
これは、生成された js ファイル内のこの行http://pastebin.com/Mu1qfG25 @ line 1460
にあります。Module['FS_createDataFile']('/', 'gizmo.webm', [26, 69, 223,....]), true, true);
結果の js ファイルに FS が挿入されることはありません。だから私がそのFSのものをどのように呼ぶかは問題ではありません。そのライブラリ機能を挿入するために追加する必要があるコンパイラ オプションはありますか?
c++ - clang と cmake で定義されているマクロを特定する最良の方法
私は現在、Emscripten と呼ばれる驚くべき LLVM->Javascript プロジェクトを使用して、CGAL を Javascript に変換しようとしています。私はこれをコアコンポーネントのみで行っています(ImageIOやQtのものではありません)
私はその依存関係の 2 つ (GMP と MPFR) でそれを行うことができました。驚いたことに、両方の C テスト クラスを Javascript にコンパイルすることができました (ビットコード形式で生成された LLVM ライブラリに対して)。nodejs で実行される出力は、ネイティブの結果と正確に一致します。
libboost-thread の 1 つを除いて、他のすべての依存関係はヘッダーのみ (Eigen、Boost) です。現在、明らかに JS はシングル スレッドであるため、これを CGAL コードから削除できることを望んでいます。幸いなことに、私が定義した CGAL_HAS_NO_THREADS マクロがあります。
そして、それは -D オプションとしてコマンドラインに渡されるようです
ただし、clang でコンパイルしようとすると (clang などをセットアップする Emscripten ツールを介して cmake を実行してセットアップします)、gcc でコンパイルするときには得られない大量のエラーが発生します。
1)まず、次のようなものです。
これにより、「不明なエンディアン」エラーが発生します。ClangコンパイラがGLIBCマクロを定義していないことが原因だと思いますか?
もう一つは次のようなものです。
ライブラリを見つけるために別のパッチ(またはパスのセット、またはパスの順序)を使用してclangにダウンしているようです。
どちらも明らかに少しずつハッキングできますが、それは「正しい」方法ではないと思います。
私が抱えている問題は、clang (または gcc) を実行するときに定義されているマクロをよく知っていることですか? /usr/include/ のルートにあるすべてのインクルードが何であるかもわかりませんか?
それらのいくつかはGNUCであり、これは何らかの方法で標準のlibcおよびlibcxxライブラリとは異なることを知っていますか? しかし、それらのすべてではありませんか?
どんな助けでも大歓迎です。
マルコス
javascript - Emscripten で Boost を使用する
Web アプリケーションに変換したい C++ プロジェクトがあります。この目的のために、Emscripten を使用してプロジェクトをビルドしたいと考えています。
プロジェクトは、いくつかの外部ライブラリを使用します。私はほとんどのライブラリのJavaScriptバージョンをコンパイルまたは見つけることができましたが、今はBoostのもので立ち往生しています。実際、Boost の開始方法も知りません。Boostrap スクリプトを使用してファイルを生成し、ライブラリを構築します。ツールセットをこのスクリプトに渡すことは可能ですが、Emscripten は明らかにサポートされていません。
私のプロジェクトでは、Boost の次の部分を使用しています: Thread、Regex、FileSystem、Signals、System。Emscripten を使用してこれらのライブラリをコンパイルするにはどうすればよいですか?
編集
npclaudiu の回答に従って、ライブラリを gcc ツールキットでブートストラップし、編集project-config.jam
してコンパイラを構成し、以下を置き換えました。
と
これで、入力によって./b2
効率的にライブラリが構築されます。Boost.Signals と Boost.System は適切にコンパイルされます。他は若干の誤差があります。
Boost.Thread は不平を言います:
Boost.Regex は、CHAR_BIT が宣言されていないことについて多くの不平を言っていますが、emscripten では問題のようです:
Boost.FileSystem も emscripten が原因で失敗するようです:
emscripten - Emscripten での C++ クラスとの相互作用
Emscripten のチュートリアルでは、C 関数と対話する方法について適切に説明されています: https://github.com/kripken/emscripten/wiki/Interacting-with-code
しかし、C++ クラスとどのようにやり取りしますか。
- コンストラクターを呼び出してオブジェクトを作成する
- オブジェクトを削除する
- クラスとそのメソッドのデッド コードの削除を防ぐ