Проблема связывания кода C ++ с использованием Boost с Mingw - PullRequest
0 голосов
/ 10 ноября 2010

Я пытаюсь портировать / собрать часть своего кода, написанного для gcc (на linux) как dll на windows.Сначала я попытался встроить в VC ++, но было очень много ошибок / предупреждений (в основном в собственных подключаемых файлах VC, которые для меня не имели особого смысла :)), поэтому я установил дистрибутив MinGW (который включает библиотеки Boost).Компиляция прошла довольно гладко, однако связывание не удалось с неопределенными ссылками на функции из библиотек boost.Параметр "-t" показал, что компоновщик на самом деле не использует библиотеки boost по какой-то причине (да, путь -L правильный, библиотеки есть, компоновщик не жалуется, когда я использую -l).

После долгих поисков я обнаружил, что проблема в порядке, что я должен разместить свои параметры -l после всех моих файлов .o (из-за зависимостей).Похоже, это решило все проблемы, кроме одной неопределенной ссылки на библиотеку потоков.Опять же -t показал, что эта библиотека на самом деле не используется компоновщиком (нет в списке), остальные - (я также использую boost_system и boost_date_time).Я снова играл с порядком параметров, но результат был тот же.Есть идеи, что мне не хватает?

Ошибка:

c:/x5/cpp/build//timed_cond.o:timed_cond.cpp:(.text$_ZN5boost6detail24basic_condition_variable7do_waitINS_11unique_lockINS_5mutexEEEEEbRT_NS0_7timeoutE[bool boost::detail::basic_condition_variable::do_wait<boost::unique_lock<boost::mutex> > (boost::unique_lock<boost::mutex>&, boost::detail::timeout)]+0x246): undefined reference to `_imp___ZN5boost11this_thread18interruptible_waitEPvNS_6detail7timeoutE'

Я использую одинаковые версии библиотеки Boost (1.44.0) на обеих платформах

1 Ответ

1 голос
/ 10 ноября 2010

Хорошо, я нашел ответ.Похоже, проблема в том, что библиотеки наддува статичны в MinGW-дистрибутиве.Обычно они настроены для динамического связывания, что вызвало вышеуказанную проблему. Этот ответ объясняет это ...

...