Я пытаюсь создать статическую библиотеку Boost, которая не будет зависеть от версии проекта (MT или MD).Единственное, что требуется для создания такой библиотеки, - это добавить в командную строку параметр /Zl
.
Я отредактировал tools/build/src/user-config.jam
и указать здесь флаги компилятора:
using msvc : : : <cxxflags>/Zl ;
Когда я открываю rsp
файлы генерируются системой Boost, я вижу флаг /Zl
здесь, например, в regex.obj.rsp
:
"libs\regex\build\..\src\regex.cpp" -Fo"bin.v2\libs\regex\build\msvc-14.1\release\address-model-64\link-static\runtime-link-static\threading-multi\regex.obj" -TP /O2 /Ob2 /W4 /GR /MT /Zc:forScope /Zc:wchar_t /favor:blend /wd4675 /EHs /Zl -c
-DBOOST_ALL_NO_LIB=1
-DNDEBUG
"-I."
Итак, для меня это выглядит так, как будто полученная библиотека может связывать и / MD, и /гораОднако это не так:
libboost_regex.lib(regex.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease'
Этот трюк (с /Zl
) работает для меня с zlib
, openssl
, libcurl
, libsqlite3
и многими другими библиотеками;Может кто-нибудь объяснить, почему он не работает с boost
?Может ли boost
каким-либо образом переопределить параметр /Zl
, даже если он существует в файле rsp
и в user-config.jam
, или почему библиотекам boost
требуется та же версия времени выполнения, даже если параметр /Zl
должен делать его независимым от времени выполнения?