gpt4 book ai didi

c++ - 未定义对 _Unwind_Resume 和 __gxx_personality_v0 的引用

转载 作者:可可西里 更新时间:2023-11-01 14:53:43 25 4
gpt4 key购买 nike

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

当我包含来自 json header 的任何内容时,我的链接器崩溃并发出这两个错误。我开始环顾四周,发现另外两个问题基本上描述了我的问题:

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

What is __gxx_personality_v0 for?

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

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

但是,我不明白为什么会出现这个错误。 CodeBlocks 的设置使其对 cpp 文件使用 migw32-g++,并且添加 -lstdc++ 选项也不能解决问题。选项 -fno-exception 也没有(请注意,我想要异常(exception),我只是在尝试)。

我还在同一个文件中包含了一个增强库,这不会导致任何问题。

编辑:

错误输出正是我在标题中所说的:在链接过程中,我总共得到了 22 个对 _Unwind_Resume 和 __gxx_personality_v0 的 undefined reference 。我的代码是:

#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

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

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

最佳答案

对于那些从谷歌来的人(就像我一样),对 _Unwind_Resume__gxx_personality_v0 的 undefined reference 的真正原因是“使用使用不同的 gcc堆栈展开方法比 dwarf2"[ 1 ]

在我的例子中,它试图将使用 GCC 4.9 编译的代码向上链接到使用 GCC 4.8 或更低版本编译的库。解决方案是使用您正在构建的同一编译器重新编译库。

关于c++ - 未定义对 _Unwind_Resume 和 __gxx_personality_v0 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10419801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com