Включение boost :: filesystem приводит к ошибкам компоновки - PullRequest
0 голосов
/ 29 января 2009

Хорошо, во-первых, я ссылаюсь на boost_system и boost_filesystem.

Мой компилятор представляет собой пользовательскую сборку MinGW с GCC 4.3.2

Так что, когда я включаю:

#include "boost/filesystem.hpp"

Я получаю ошибки связывания, такие как:

..\..\libraries\boost\libs\libboost_system.a(error_code.o):error_code.cpp:
    (.text+0xe35)||undefined reference to `_Unwind_Resume'|

..\..\libraries\boost\libs\libboost_system.a(error_code.o):error_code.cpp:
    (.eh_frame+0x12)||undefined reference to `__gxx_personality_v0'|

Что после небольшого поиска я обнаружил чаще всего при попытке связать программу на C ++ с gcc, компилятором GNU C. Но я распечатал точную команду сборки, которую Code :: Blocks выполняет, и она определенно связана с g ++.

Если я закомментирую это, все будет нормально.

Есть идеи? Кроме того, кто-нибудь знает хорошее место, чтобы получить бинарные файлы для Windows для повышения? Система сборки вызывает у меня проблемы, поэтому я использую некоторые двоичные файлы, которые поставляются с этим пользовательским пакетом MinGW

Ответы [ 2 ]

2 голосов
/ 29 января 2009

Хорошо, я нашел проблему. Это немного запутанно.

GCC постепенно становится более совместимым с IS 14882 в ветке 4.x. По мере продвижения они удаляют устаревшие нестандартные функции для жалоб.

В то время как 4.1.x, кажется, только исключает их и не удаляет, 4.3.x, кажется, фактически удаляет их. Это означает, что 4.3.x и выше имеют некоторые проблемы обратной совместимости с вещами, скомпилированными в ветке 3.x (которые использовали устаревшие и теперь удаленные функции)

Я использовал комбинацию из двоичных файлов, которая была скомпилирована с GCC 3.x, 4.1.x и 4.3.x, поэтому независимо от того, какой из них я использовал, я получал похожую ошибку, потому что по крайней мере один двоичный файл I ссылка была несовместима с компилятором, который я пробовал в данный момент.

Я сейчас использую GCC 4.1.2, и большинство моих двоичных файлов были скомпилированы с ним. Я все еще использую несколько бинарных файлов из 3.x, поэтому я пока не обновляюсь до 4.3.x.

Надеюсь, что читать было менее запутанно, чем писать ...

Этот кажется хорошим постом, посвященным некоторым вопросам, которые были в 4.1.x

0 голосов
/ 29 января 2009

Двоичные файлы Windows: www.boost.org - см. Страницу «Начало работы» - но если вы используете g ++ в MingGW, вам не нужны такие. Простой способ понять это, MingGW похож на операционную систему внутри операционной системы, так что на самом деле вы не используете Windows. Те, что у вас есть, вероятно, правы.

Хотя вы не уверены, что происходит с вашим кодом, похоже, что файлы lib не связаны должным образом. Boost называет свои lib-файлы сами по себе, так что вы на самом деле не называете их явно, но вы должны иметь lib-файлы для boost по правильному пути (и убедитесь, что они тоже установлены / собраны, чего не может быть). Я не уверен, как получить их по правильному пути с g ++, потому что я не использовал MingGW, я использовал только повышение с Visual Studio.

...