未定义的_unwind_resume和__gxx_personality_v0引用

Sva*_*zen 11 c++ mingw exception

我正在尝试使用JsonCpp库.我在Windows上,使用MinGW和CodeBlocks.

当我在json头中包含任何内容时,我的链接器会崩溃并发出这两个错误.我已经开始环顾四周了,我发现了另外两个基本上描述我问题的问题:

g ++和"未定义引用`__gxx_personality_v0'"的问题

什么是__gxx_personality_v0?

如果我将两个缺失的变量声明为void指针,如下所示,则问题就会消失:

void * __gxx_personality_v0=0;
void * _Unwind_Resume =0;
Run Code Online (Sandbox Code Playgroud)

但是,我不明白为什么会发生这种错误.CodeBlocks已设置为使用migw32-g ++表示cpp文件,并且添加-lstdc ++选项并不能解决问题.选项-fno-exception也没有(我想要例外,请注意,我只是在尝试).

我还在同一个文件中包含一个boost库,不会造成任何问题.

编辑:

错误输出正是我在标题中所说的:在链接期间,我总共获得了22个未定义的_Unwind_Resume和__gxx_personality_v0引用.我的代码是:

#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;
}
Run Code Online (Sandbox Code Playgroud)

只有当我包含/使用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
Run Code Online (Sandbox Code Playgroud)

第二次编辑:我正在添加用于编译库的命令行:

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
Run Code Online (Sandbox Code Playgroud)

Rio*_*iot 31

对于那些来这从谷歌(如我一样),对未定义的引用的真正原因_Unwind_Resume__gxx_personality_v0被"利用使用不同的堆栈展开方法比DWARF2一个gcc" [ 1 ]

在我的情况下,它试图将使用GCC 4.9向上编译的代码与使用GCC 4.8或更低版本编译的库链接.解决方案是使用您正在构建的相同编译器重新编译库.

  • 好答案。在尝试使用gcc 4后恢复到gcc 3时遇到了__Unwind_Resume错误,我不得不返回并用gcc 3重新编译两个库,然后才能链接它们。 (2认同)

Sva*_*zen 0

我最终通过导入 Code::Blocks JsonCpp 的源代码并自己创建库来解决这个问题。我仍然感到困惑,为什么用 Scons 创建的库不起作用,因为它使用的是 Code::Blocks 使用的相同编译器,但同时它却不起作用(或者错误就不会出现) )。