Проблемы с Visual Studio Boost / MT Linking - PullRequest
0 голосов
/ 28 января 2012

Я использую библиотеку потоков Boost и столкнулся с проблемами компоновки в Visual Studio.

Сейчас я компилирую свой проект VS с / MT.Библиотека, с которой я ссылаюсь, называется libboost_thread-vc100-mt-1_48.lib , что указывает на то, что она тоже была скомпилирована с использованием / MT.

Однако, если я отключу все библиотеки, связанные с / MD, в настройках компоновщика (свойства -> Линкер -> Ввод -> Игнорировать определенные библиотеки по умолчанию) ...

msvcrt.lib 
msvcrtd.lib 
msvcprt.lib 
msvcprtd.lib

Затем яполучить ошибки компоновщика!

libboost_thread-vc100-mt-1_48.lib(thread.obj) : error LNK2001: unresolved external symbol __imp___gmtime64
libboost_thread-vc100-mt-1_48.lib(thread.obj) : error LNK2001: unresolved external symbol __imp___beginthreadex

Как это возможно, просто отключив библиотеки, связанные с / MD?boost :: thread должен связываться только с библиотеками в / MT (который должен быть LIBCMT.LIB, LIBCPMT.LIB).Я неправильно скомпилировал буст?

1 Ответ

2 голосов
/ 28 января 2012

БАМ! Линкер победил!

Похоже, моя догадка была права. Я неправильно скомпилировал boost. Чтобы эмулировать / MT с расширенной сборкой, вам нужно связать со статическими библиотеками времени выполнения (связь с динамическими библиотеками времени выполнения, похоже, используется по умолчанию).

Команда для этого (для сборки выпуска boost :: thread) была:

.\b2 --with-thread variant=release link=static threading=multi runtime-link=static

Надеюсь, это поможет кому-то, использующему в своем проекте boost с / MT!

...