2011-12-26 11 views
1

例外をスローする単純なC++プログラムをコンパイルする際に、この奇妙な問題があります。AIX 1.7でのC++コンパイルの問題

main.cc:

#include <stdio.h> 
double mean(double a, double b) 
{ 
    if((a + b) == 0) 
    { 
     throw "Exception:: Numerator is Zero"; 
    } 
    return (a+b)/2;` 
} 

calc.cc:

#include <stdio.h> 
double mean(double a, double b) 
{ 
    if((a + b) == 0) 
    { 
     throw "Exception:: Numerator is Zero"; 
    } 
    return (a+b)/2; 
} 

私は以下のようにそれをコンパイルする場合:

 
Execute the following commands : 
Step 2.1 => gcc -maix64 -fpic -c calc.cc 
Step 2.2 => gcc -maix64 -shared -o libcalc.so calc.o -lstdc++ 
Step 2.3 => gcc -maix64 main.cc libcalc.so -lstdc++ 

をし、プログラムを実行すると、プログラムは次のようでクラッシュエラー:

 
terminate called after throwing an instance of 'char const*' 
IOT/Abort trap (core dumped) 

しかし、その代わりのステップ2.3、我々は次のコマンドを使用している場合期待通りに物事が働いている:

gcc -maix64 main.cc libcalc.so -lstdc++ -lgcc_s

あなたはこれを解決するには助けてくださいでした...

+2

投稿を確認できますか?あなたの計算とメインは同じです。 –

+1

AIX 7.1を意味しますか? AIX 1.7は、これまで存在していたとしても数十年前のものです。 –

+0

それは1.7です(オススメするのは申し訳ありません) '' –

答えて

0

あなたは質問に答えを提供、 おもう。この質問は私にも同様の問題を解決するのに役立ちました。 g ++でコンパイルされた共有オブジェクトにリンクされていて、例外を投げることができる特定のCバイナリがあります。例外は常にライブラリに捕捉されます。 AIX上でこれをリンクするには、リンク行にすべての従属ライブラリーを指定する必要があります。そこで、-lstdC++を追加しました。これにより、すべてのコンパイルが可能になりましたが、共有オブジェクトに例外がスローされるとすぐにランタイムテストがクラッシュします。 gcc_sはすべての例外処理コードが存在する場所であるため、-lgcc_sを追加するとこれが修正されました。

Steve Cがコメントしたように、代わりにg ++を使って.cファイルをコンパイルして、これをすべて処理します。私たちのビルドシステムは常に.cファイル用のgccを呼び出しています。それは私にとっては痛いものでしたので、-lstdC++と-lgcc_sを追加しました。すべてのランタイムテストを含めてすべて動作します。