如何使用“忽略默认库名称”和Visual C ++构建增强功能?

时间:2019-03-14 15:42:09

标签: c++ boost

我尝试构建不依赖项目运行时版本(MT或MD)的静态Boost库。构建此类库的唯一要求是在命令行中添加/Zl选项。

我编辑了tools/build/src/user-config.jam并在此处指定编译器标志:

using msvc : : : <cxxflags>/Zl ;

当我打开由boost build系统生成的rsp文件时,我在这里看到/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和/ MT。但是,事实并非如此:

libboost_regex.lib(regex.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease'

此技巧(使用/Zl)对我来说适用于zlibopenssllibcurllibsqlite3和许多其他库;谁能解释为什么它不适用于boost吗? boost是否以某种方式覆盖了/Zl选项,即使它存在于rsp文件和user-config.jam中,还是为什么boost库甚至要求{{1 }}选项是否应该使其与运行时无关?

0 个答案:

没有答案