2012-03-03 12 views
6

私はソフトウェアのコード生成バックエンドとしてllvmを使用しようとしていますが、llvmがC++例外処理のサポートなしで)。しかし私のソフトウェアでは、例外処理を広範囲に使用しています。例外処理(C++/LLVM)をサポートしていないコードとのリンク

try-catch-blocksですべてのコールバック関数をラップすると(例外なく、llvmコードを "伝える"必要がないように)、 "-fno-exceptions"(GCC用)私のリンカーの旗から? (このフラグは通常、llvmとリンクするときに必要です。llvm-config --cxxflagsを実行したときに表示されます)。

もしそうでなければ、 "throws()"で宣言された関数でllvm関数をラップすると状況は変わりますか?これらの関数の実装は、-fno-exceptionsでコンパイルできます。

+0

私はABIのコンプライアンスには賭けませんが、誰が知っていますか?例外を有効にしてLLVMをコンパイルする方が簡単で安全です。 – delnan

+0

@delnan llvmのコンパイルはオプションではありません。私のソフトウェアは、さまざまなプラットフォーム(Linux、Mac、Windows)上の複数の人々によって使用されており、あなたが得るデフォルトのllvmのインストールに依存する必要があります。 apt-getから。 – Joel

+0

@delnan:私はABIとの互換性についてはあまりよく分かりませんが、関数がthrows()で宣言されていれば、この場合は得られますか?私はそれに応じて問題を修正した。 – Joel

答えて

3

(例外はLLVMコード「を通じて」伝播する必要はないように)私はのtry-catchブロック内のすべての私のコールバック関数をラップした場合、私はその後、安全にするために(「-fno-例外」を削除することができますGCC)を私のリンカーフラグから削除しますか?

はい、例外がスローされる原因となった条件を報告する適切な方法があるとします。

-fexceptionsがC++のデフォルトです。 -fno-exceptionsはCのデフォルトです。デフォルトのオプションでコンパイルされたC++コードと、デフォルトのオプションでコンパイルされたCコードを混在させても問題ありません。-fexceptions-fno-exceptionsを混在させることはできません。

-fno-exceptionsを削除する代わりに、-fexceptionsを追加することを検討してください.GCCが複雑であるのとまったく同じ方法でコマンドラインオプションを解析するので、そのようにする必要はありません。

+0

OK!それは私が知る必要があるすべてです。 C.と並行して考えなかった。ありがとう! – Joel

関連する問題