2016-04-02 1 views
0

編集:この問題は私のコードでは解決されていない。これはgccのクロスコンパイルの問題です。gcc-4.8.5でコンパイルしたときにC++の例外がRaspberry Piで捕捉されないが、gcc-4.6.4で動作する

gb-4.6.4を使用すると、すべてがうまくいくように見えますが、g ++でUbuntu x64で大きなC++プログラムをクロスコンパイルしています。 gcc-4.8.5を使用すると、例外が漏れてプログラムが強制終了するように見えます。私はgcc-4.8.5を使って例外をキャッチするという最小限の例を試しましたが、最小限のケースは適切に動作するようです。私の実際のプログラムははるかに複雑で、例外キャッチがどこかで失われているようです。

例外処理を改善するいくつかのg ++​​設定がありますか?

私は1.22

編集をcrosstoolsが-ngのツールチェーンをコンパイルしています:これは、コードが何をしているのか、本質的である:

//error_function may be deeper in the stack 
void error_function() 
{ 
    throw std::runtime_error("This is an error"); 
} 

try 
{ 
    error_function(); 
} 
catch (std::exception&) 
{ 
    //Not being caught 
} 
+0

Cライブラリから呼び出されたC++コールバックから例外がスローされている可能性はありますか? – rodrigo

+0

私は、問題があなたのコードのどこかにあると確信しています。最小限の例を抽出する。 –

+0

このコードは、問題のない複数のプラットフォームで広範にテストされています。この問題は、gcc-4.8 armhfでのみ発生します。私は最小限の例で問題を再現できず、コードは独自のものです。 – John

答えて

1

は-O0を設定することで、最適化をオフにする問題を修正しているようです。このバグは、gcc 4.8.5 ARMv6ハードフロートビルドに固有のようです。

+0

'gcc -c -Q -O0 --help = optimizers'のようなコマンドを使って*特定の' -f'フラグが問題になるようにする必要があります。特に、テーブルの巻き戻しに関連するオプションを調べることにします。 – o11c

+0

残念ながら、このレベルのコンパイラの詳細には慣れていません。 gcc -c -Q -O0 --help = optimizersとgcc -c -Q -O3 --help = optimizersを比較したペーストビンを作成しました。何か提案はありますか?各スイッチのテストにはかなりの時間がかかります。 http://pastebin.com/fMV8RhTv – John

+0

* once *ですべてのオプションをテストする必要はなく、 'O(log(n))'時間に半分ずつテストすることができます。だから私は「二等分」と言った。 – o11c

関連する問題