2012-02-13 2 views
0

Я попытался скомпилировать очень простой пример, найденный на примере boost.asio, но я получаю ошибку компоновщика. Это полная командная строка, я использую:Ошибка компоновщика при использовании Boost.asio с MingW на окнах 7

 
mingw32-c++.exe -L..\..\Important\docs\c++\boost\boost_1_48_0\stage\lib -L..\..\Important\docs\c++\boost\boost_1_48_0\stage\lib -o bin\Debug\CPP_WITHOUT_FEAR_1st_APP.exe obj\Debug\main.o obj\Debug\prog_2.o obj\Debug\timer.o obj\Debug\convert.o -lwsock32 ..\..\Important\docs\c++\boost\boost_1_48_0\stage\lib\libboost_system-mgw45-mt-1_48.a 

Ошибки я получаю:

 
..\..\Important\docs\c++\boost\boost_1_48_0\stage\lib\libboost_system-mgw45-mt-1_48.a(error_code.o):error_code.cpp:(.text+0x148): undefined reference to `_Unwind_Resume' 
..\..\Important\docs\c++\boost\boost_1_48_0\stage\lib\libboost_system-mgw45-mt-1_48.a(error_code.o):error_code.cpp:(.text+0x16c4): undefined reference to `_Unwind_Resume' 
..\..\Important\docs\c++\boost\boost_1_48_0\stage\lib\libboost_system-mgw45-mt-1_48.a(error_code.o):error_code.cpp:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0' 

Пытались выяснить, что случилось, но я не смог найти ответ в любом месте. Спасибо, Sree

ответ

0

Вы пытаетесь связать объектные файлы, скомпилированные в gcc, с вашей программой, скомпилированной в g ++?

`undefined reference to `__gxx_personality_v0'` 

обычно связано с указанием GCC как компилятор, когда вы имели в виду указать г ++

Если это не так, вы пытаетесь связать объектные файлы, скомпилированные с помощью SJLJ (setjmp/longjmp) с использованием DW2 (Dwarf-2) или наоборот?

Э.Г. Были ли объектные файлы вашей программы скомпилированы mingw (версия 3.4.5 - SJLJ), а boost, скомпилированный gcc (версия 4.4+ - DW2)?

Если это так, то убедитесь, что ваш компилятор и библиотеки, с которыми вы связываетесь, были скомпилированы с тем же компилятором, который имеет обработку исключений SJLJ или обработку исключений DW2.

В настоящее время бета-версия minGW 4.40 на своем веб-сайте имеет DW2 по умолчанию и предполагает, что boost был скомпилирован с помощью DW2, который затем должен скомпилировать и установить связь.

Что касается SJLJ и DW2, это методы обработки исключений. SJLJ использует setjmp и longjump, а DW2 использует отладочную информацию DWARF-2 (или DWARF-3). SJLJ работает медленнее, но DW2 требует больше места, что приводит к большим двоичным файлам.

Для получения дополнительной информации об обработке исключений см here

для того, как DW2 работает see here

+0

Да, я думаю, что я использую dw2 версии, и повышение скомпилирован с sjlj – sreejith

+0

Пробовал оба типа методов обработки исключений, но все тот же результат. Когда я dw2 основе, Я получаю: неопределенная ссылка на '__gxx_personality_sj0' неопределенная ссылка на' _Unwind_SjLj_Register» Когда я попытался с SJLJ Я получаю: неопределенная ссылка на' _Unwind_Resume ' __gxx_personality_v0 – sreejith

+0

Убедитесь, что и ваш компилятор, и компоновщик, и библиотеки созданы с помощью SJLJ или DW2, и вы не должны получать ни ошибки – Appleman1234

Смежные вопросы