2012-05-02 42 views
7

Tôi đang cố sử dụng thư viện JsonCpp. Tôi đang sử dụng Windows, sử dụng MinGW và CodeBlocks.Tham chiếu không xác định đối với _unwind_resume và __gxx_personality_v0

Khi tôi bao gồm bất kỳ thứ gì từ tiêu đề json, trình liên kết của tôi sẽ kích hoạt và đưa ra hai lỗi này. Tôi đã bắt đầu nhìn xung quanh và tôi thấy hai câu hỏi khác mà về cơ bản mô tả vấn đề của tôi:

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

What is __gxx_personality_v0 for?

Và nếu tôi khai báo hai biến mất tích như con trỏ void, giống như dưới đây, vấn đề biến mất:

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

Tuy nhiên, tôi không hiểu tại sao lỗi này xảy ra. CodeBlocks được thiết lập để nó sử dụng migw32-g ++ cho các tệp cpp và cũng thêm tùy chọn -lstdC++ không khắc phục được sự cố. Không có tùy chọn -fno-exception (Tôi muốn ngoại lệ, hãy nhớ bạn, tôi chỉ đang cố gắng).

Tôi cũng bao gồm thư viện tăng trong cùng một tệp và điều đó không gây ra bất kỳ sự cố nào.

EDIT:

Sản lượng lỗi là chính xác những gì tôi đã nói trong tiêu đề của tôi: Tôi nhận được tổng cộng 22 tài liệu tham khảo không xác định để _Unwind_Resume và __gxx_personality_v0 trong liên kết. Mã của tôi là:

#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; 
} 

Lỗi này chỉ có khi tôi đưa/sử dụng thư viện JsonCPP. Bỏ ghi chú các dòng nhận xét sẽ khắc phục sự cố.

Sản lượng dòng lệnh là:

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 

EDIT THỨ HAI: tôi thêm các dòng lệnh tôi sử dụng để biên dịch thư viện:

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

Vui lòng làm rõ câu hỏi của bạn. Nó có thể giúp hiển thị đầu ra lỗi thực tế. – Jerry

+0

Bạn có đầu ra trình biên dịch không? Các dòng lệnh trình biên dịch và trình liên kết là gì? – jpalecek

+3

Bạn đang liên kết với 'gcc' hoặc' g ++'? Lưu ý rằng sửa chữa của bạn sẽ gây ra dereference null và một vụ tai nạn khó chịu trong thời gian chạy khi một ngoại lệ được ném. – rubenvb

Trả lời

0

Cuối cùng tôi cố định này bằng cách nhập vào Code :: Chặn mã nguồn của JsonCpp và tự tạo thư viện. Tôi vẫn còn bối rối mặc dù tại sao thư viện được tạo ra với Scons không hoạt động, vì nó đang sử dụng trình biên dịch giống như Code :: Blocks sử dụng, nhưng đồng thời nó không (hoặc lỗi sẽ không có ở đó).

24

Đối với những người đến đây từ google (như tôi đã làm), nguyên nhân thực sự của tài liệu tham khảo không xác định để _Unwind_Resume__gxx_personality_v0 được "sử dụng một gcc có sử dụng một chồng phương pháp thư giãn khác với dwarf2" [1]

Trong trường hợp của tôi, nó đã cố gắng liên kết mã được biên dịch với GCC 4.9 trở lên với một thư viện được biên dịch với GCC 4.8 trở xuống. Giải pháp là biên dịch lại thư viện với cùng trình biên dịch mà bạn đang xây dựng.

+1

Câu trả lời hay. Tôi chạy vào '__Unwind_Resume' lỗi khi tôi đã cố gắng để trở lại gcc 3 sau khi sử dụng gcc 4. Tôi đã phải quay trở lại và biên dịch lại hai thư viện với gcc 3 trước khi tôi có thể liên kết chúng. – tomlogic

Các vấn đề liên quan