«Сочетание библиотеки Boost DLL со статической средой выполнения - действительно плохая идея…»

У меня есть два проекта в решении Visual Studio. Один создает статический LIB, другой - динамическую DLL. Оба используют статическое связывание времени выполнения (/ MT и / MTd), и оба используют Boost. Повышение не было моим решением - я хотел отказаться от него, но комитет отклонил мое решение.

LIB строится нормально, но DLL выдает ошибку из auto_link.hpp (строка 354): «Смешивание библиотеки Boost DLL со статической средой выполнения - действительно плохая идея ...».

#if (defined(_DLL) || defined(_RTLDLL)) && defined(BOOST_DYN_LINK)
#  define BOOST_LIB_PREFIX
#elif defined(BOOST_DYN_LINK)
#  error "Mixing a dll boost library with a static runtime is a really bad idea..."
#else
#  define BOOST_LIB_PREFIX "lib"
#endif

Я не определял BOOST_DYN_LINK. Похоже, что Boost делает скачок в том, что, поскольку я создаю DLL (определены _USRDLL и _WINDLL), мне нужно динамическое связывание времени выполнения (/ MD или / MDd, которое определяет _DLL) или связывание DLL с Boost. Это неверно, так как я специально попросил статическое связывание (/ MT или / MTd).

Я отправил отчет об ошибке против Boost из-за его неверных предположений, но это не помогает мне при использовании библиотеки. В отчете сопровождающие Boost настаивают на том, что я его настраиваю (несмотря на то, что аудит показал, что это не так; Boost манипулирует им как минимум в 30 файлах). Я нашел один ответ в списке рассылки Boost, в котором, по сути, говорится об изменении настроек моего проекта для поддержки Boost.

Переход на динамическое связывание во время выполнения (/ MD и / MDd) невозможно, так как статическое связывание было выбрано (1) из соображений безопасности, и (2) другая библиотека использует статическое связывание. Это не подлежит обсуждению - у нас нет выбора.

Резюмируя для ясности (TL; DR): я хочу использовать статическое связывание для всего, в то время как моя программа вывода является DLL (не статической LIB, не EXE). Все статически связано с DLL.

Кто-нибудь знает, как использовать эту библиотеку в Windows для создания библиотеки DLL со статической компоновкой?

8
задан jww 5 July 2015 в 21:04
поделиться