2012-05-02 33 views
7

私はJsonCppライブラリを使用しようとしています。私はMinGWとCodeBlocksを使ってWindows上にいます。_unwind_resumeおよび__gxx_personality_v0への未定義の参照

私がjsonヘッダーから何かを含めると、私のリンカーは壊滅し、この2つのエラーを出します。私は周りを見始め、私は基本的に私の問題について説明し、これらの二つの他の質問見つけた:

problem with g++ and "undefined reference to `__gxx_personality_v0'"

What is __gxx_personality_v0 for?

をそして、私は以下のように、空ポインタとして2つの不足しているの変数を宣言した場合、問題が解消する:

void * __gxx_personality_v0=0; 
void * _Unwind_Resume =0; 

ただし、このエラーが発生する理由はわかりません。 CodeBlocksは、cppファイルにmigw32-g ++を使用するように設定されています。また、-lstdC++オプションを追加しても問題は解決されません。オプション-fno-exceptionも例外ではありません。

私は同じファイルにブーストライブラリも含めていますが、問題はありません。

編集:私は、リンク時に_Unwind_Resumeと__gxx_personality_v0に22の未定義の参照の合計を取得:

エラー出力は、私は私のタイトルに言った、まさにです。私のコードは:

#include <boost/algorithm/string.hpp> 
#include <include/json/value.h> 
//void * __gxx_personality_v0=0; 
//void * _Unwind_Resume =0; 
int main() { 
    std::string str1("Hello world!"); 
    boost::to_upper(str1); 
    Json::Value k; 
    return 0; 
} 

私はJsonCPPライブラリをインクルード/使用するときだけエラーがあります。コメント行のコメントを外して問題を解決します。

mingw32-g++.exe -Wall -fexceptions -g -DSFML_DYNAMIC -IC:\Users\Svalorzen\Documents\Projects\boost_1_49 -IC:\Users\Svalorzen\Documents\Projects\jsoncpp-src-0.5.0 -IC:\Users\Svalorzen\Documents\Projects\SFML-1.6\include -IC:\Users\Svalorzen\Documents\Projects\hge181\include -c C:\Users\Svalorzen\Documents\Projects\test\main.cpp -o obj\Debug\main.o 
mingw32-g++.exe -LC:\Users\Svalorzen\Documents\Projects\jsoncpp-src-0.5.0 -LC:\Users\Svalorzen\Documents\Projects\SFML-1.6\lib -LC:\Users\Svalorzen\Documents\Projects\hge181\lib -o bin\Debug\test.exe obj\Debug\main.o -fno-exceptions -lsfml-graphics -lsfml-window -lsfml-system C:\Users\Svalorzen\Documents\Projects\jsoncpp-src-0.5.0\libs\mingw\libjson_mingw_libmt.a C:\Users\Svalorzen\Documents\Projects\hge181\lib\gcc\libhge.a C:\Users\Svalorzen\Documents\Projects\hge181\lib\gcc\libhelp.a 
Output size is 1.22 MB 
Process terminated with status 0 (0 minutes, 3 seconds) 
0 errors, 0 warnings 

SECOND EDIT:

コマンドライン出力がこれです 私は、ライブラリをコンパイルするために使用するコマンドラインを追加している:

g++ -o buildscons\mingw\src\lib_json\json_reader.o -c -DWIN32 -DNDEBUG -D_MT -Iinclude src\lib_json\json_reader.cpp 
g++ -o buildscons\mingw\src\lib_json\json_value.o -c -DWIN32 -DNDEBUG -D_MT -Iinclude src\lib_json\json_value.cpp 
g++ -o buildscons\mingw\src\lib_json\json_writer.o -c -DWIN32 -DNDEBUG -D_MT -Iinclude src\lib_json\json_writer.cpp 
ar rc buildscons\mingw\src\lib_json\libjson_mingw_libmt.a buildscons\mingw\src\lib_json\json_reader.o buildscons\mingw\src\lib_json\json_value.o buildscons\mingw\src\lib_json\json_writer.o 
ranlib buildscons\mingw\src\lib_json\libjson_mingw_libmt.a 
+0

質問を明確にしてください。実際のエラー出力を表示するのに役立ちます。 – Jerry

+0

コンパイラ出力はありますか?コンパイラとリンカのコマンドラインは何ですか? – jpalecek

+3

あなたは 'gcc'または' g ++ 'とリンクしていますか?例外がスローされたときに、実行時に修正がnull参照解除と異常なクラッシュを引き起こすことに注意してください。 – rubenvb

答えて

0

私は最終的にインポートすることで、これを固定しましたコード:: JsonCppのソースコードをブロックし、自分でライブラリを作成します。私はまだ、Sconsで作成されたライブラリはCode :: Blocksと同じコンパイラを使用していたので動作しませんでしたが、同時にそうではありませんでした(またはエラーはそこになかったはずです) )。グーグルからこのに来る人のために

24

(私が行ったように)、_Unwind_Resume__gxx_personality_v0への未定義の参照の本当の原因は、「DWARF2とは異なるスタックアンワインド方式を使用してgccのを使用して」される[1]

私の場合は、GCC 4.9以降でコンパイルされたコードをGCC 4.8またはそれ以降でコンパイルされたライブラリにリンクしようとしていました。解決策は、ビルドしているのと同じコンパイラでライブラリを再コンパイルすることです。

+1

良い答え。 gcc 4を使用した後、gcc 3に戻ろうとしたときに '__Unwind_Resume'エラーが発生しました。gcc 3を使用して2つのライブラリを再コンパイルしてリンクする必要がありました。 – tomlogic

関連する問題