Усиление построения динамически связано с ошибкой связывания?

Я пытаюсь создать boost и сгенерировать dll, но все, что я сделал, не решило проблему.

Вот что я получил:

Создание библиотеки bin.v2\libs\thread\build\msvc-11.0\dbg\adrs-mdl-32\async-excpt-on\thrd-mlt\boost_thread-vc110-mt-gd-1_53.lib и объект bin.v2\ЛИЭС\нить\сборка\MSVC-11,0\DBG\ADRs-лея-32\асинхронной excpt-на\thrd-MLT\boost_thread-vc110-мт-Gd-1_53.exp thread.obj: ошибка LNK2019: неразрешенный внешний символ "__declspec (dllimport) public: __thiscall boost:: gregorian:: greg_month:: greg_month (unsigned short)" (_imp?? 0greg_month @gregorian @boost @@QAE @G @Z) ссылается в функции "public: __thiscall boost:: gregorian:: date:: date (enum boost:: date_time:: special_values)" (? 0date @gregorian @boost @@QAE @W4special_values ​​@date_time @2 @@Z) thread.obj: ошибка LNK2019: неразрешенный внешний символ "__declspec (dllimport) public: __thiscall boost:: gregorian:: greg_month:: оператор unsigned short (void) const" (_imp?? Bgreg_month @gregorian @boost @@QBEGXZ), на который делается ссылка в функция __catch $? make_external_thread_data @? A0x9b8c45f0 @boost @@YAXXZ $0 bin.v2\libs\thread\build\msvc-11.0\dbg\adrs-mdl-32\async-excpt-on\thrd-mlt\boost_thread-vc110-mt-gd-1_53.dll: фатальная ошибка LNK1120: 2 неразрешенные внешние

Вот некоторая информация о настройке:

ОС: W7 x64

Команда для сборки:

b2 -j% NUMBER_OF_PROCESSORS% --abbreviate-paths toolset = msvc-11.0 define = _SECURE_SCL = 0 define = _CRT_SECURE_NO_DEPRECATE define = _CRT_SECURE_NO_WARNINGS --without-mpi address-model = 32 variant = debug install link = shared runtime-link = shared threading = multi asynch-exceptions = on exception-handling = on extern-c-nothrow = off --prefix =..\boost cd..

У меня установлен CYGWin на компьютер.

Вот что я пробовал до сих пор;

* Я попытался построить его в 32-битном командном окне (я использую jenkins для создания boost)              

* Я написал #define BOOST_ALL_DYN_LINK в boost config/user.hpp

* Я написал #define BOOST_ALL_NO_LIB в файле boost/user.hpp

Есть ли у кого-то, кто раньше сталкивался с такой проблемой? Я действительно ничего не мог найти в любом месте?


EDIT:

Есть обновление о моей проблеме. Я могу создать его для выпуска. Единственное, что я изменил, здесь:

b2 -j% NUMBER_OF_PROCESSORS% --abbreviate-paths toolset = msvc-11.0 define = _SECURE_SCL = 0 define = _CRT_SECURE_NO_DEPRECATE define = _CRT_SECURE_NO_WARNINGS --without-mpi address-model = 32 variant = release install link = shared runtime-link = shared threading = multi asynch-exceptions = on exception-handling = on extern-c-nothrow = off --prefix =..\boost cd..

Что может быть проблемой? Как я могу его решить?

Спасибо заранее за любое предложение.

Ответы

Ответ 1

На самом деле я нашел решение:

То, как я использую bjam, является правильным и достаточным для динамического повышения. На этом этапе я не должен ничего определять. После компиляции я меняю user.hpp и #define BOOST_ALL_DYN_LINK. Таким образом, мои собственные проекты (которые используют boost) поймут, что повышение является динамичным. Именно так должен строиться импульс.

Это кажется лучшим способом, потому что boost автоматически декодирует необходимые библиотеки и библиотеки DLL, как ожидалось, и работает хорошо.

Ответ 2

Я вижу, что есть много ручных шагов, связанных с успешной форсировкой. На всякий случай, если вы не хотите проходить эти шаги вручную и избегать накладных расходов, попробуйте BlueGo при условии, что вы хотите использовать набор инструментов MSVC. BlueGo позволяет настраивать 32/64 бит, режимы отладки/выпуска, среди прочего.

Ответ 3

Я встретил эту проблему еще раз. В прошлый раз я использовал boost 1.54. Сейчас - буст 1.71. Я думаю, что настоящая причина в том, что в списке boost::thread отсутствует boost::date_time. То, что работало для меня в обеих версиях, это добавление следующих строк в конец правила requirements в libs/thread/build/Jamfile.v2:

if <target-os>windows in $(properties)
{
    result += <define>BOOST_THREAD_USES_DATE_TIME ;
    result += <library>/boost/date_time//boost_date_time ;  
}

Я создал проблему на Github, давай посмотрим.