3

Google NaCL には、少なくとも 2 つの C++ コンパイラが付属しています。非常に古い gcc バージョンと、非常に最近の clang バージョンです。gcc のバージョンは C++ 11 をサポートしていないため、使用しないほうがよいでしょう。非常に新しい clang コンパイラは中間コードを生成し、ブラウザでコンパイルするか、ネイティブにコンパイルします。私は最初のアプローチを試しました.Chromeにブラウザでコンパイルさせました。問題: 例外が機能しませんでした。例外が必要です。これを確認しましたが、このチケットの細字がよくわかりません。それは 2 番目のアプローチを残します: 展開する前にコードをネイティブにコンパイルします... 質問: その場合、例外を使用できますか? それとも希望を捨てるべきですか?

(... Go とこれの後、Google のエンジニアは本当に例外を嫌うという印象を受けました...)

4

3 に答える 3

7

--pnacl-exceptions=sjljPNaCl ツールチェーンの最新バージョンでは、リンク時にオプションを渡すことで C++ 例外処理を有効にすることができます。生成された pexe は、PNaCl (Chrome 31 以降) をサポートするすべてのバージョンの Chrome で動作します。

このオプションは、try/catch ブロックを内部的に setjmp() を使用するように変換します。性能は良くないかもしれません。パフォーマンスを向上させるために、後でゼロコストの例外処理の ABI 安定サポートを追加する予定です。

このオプションは、Chrome 33 の NaCl SDK で最終的に利用できるようになります。それまでは、NaCl SDK の Canary バージョンで利用できます。

于 2013-11-12T19:06:46.417 に答える
4
  • .nexe をデプロイする予定がある場合は、PNaCl ツールチェーンで C++ 例外を使用できます。

    --pnacl-allow-exceptions.pexe をリンクするときは pnacl-clang に、.pexe を .nexe に変換するときは pnacl-translate に渡す必要があります。

    このオプションを pnacl-translate に渡さないと、_Unwind_*未解決のシンボルに関するエラーが発生します。.pexe をリンクするときにこのオプションを渡さないと、例外がスローされてプログラムが終了します。

  • PNaCl の最初のリリースで .pexe がブラウザーによって変換される場合、C++ 例外はサポートされません。上記のように、例外をスローすると、プログラムが終了します。ただし、今後のリリースでは C++ の例外がサポートされる予定です。

于 2013-05-31T20:42:26.190 に答える