boost库的编译总结

Boost官网的《Geting Started On Windows》(http://www.boost.org/doc/libs/1_38_0/more/getting_started/windows.html)提到了Boost库的命名,摘录如下:

 

以 libboost_regex-vc71-mt-d-1_34.lib 为例:

  • lib 
    前缀:除了Microsoft Windows之外,每一个Boost库的名字都以此字符串开始。在Windows上,只有普通的静态库使用lib前缀;导入库和DLL不使用。
  • boost_regex 
    库名称:所有boost库名文件以boost_开头。
  • -vc71 
    Toolset 标记:标识了构建该库所用的toolset和版本。
  • -mt 
    Threading 标记:标识构建该库启用了多线程支持。不支持多线程的库没有-mt。
  • -d 
    ABI标记:编码了影响库和其他编译代码交互的细节。对于每一种特性,向标记中添加一个字母: 
    KeyUse this library when:
    s静态链接到C++标准库和编译器运行时支撑库
    g使用标准库和运行时支撑库的调试版本
    y使用Python的特殊调试构建
    d构建代码的调试版本
    p使用STLPort标准库而不是编译器提供的默认库
    n使用STLPort已被弃用的“native iostreams”
  • -1_34 
    版本标记:完整的Boost发布号,下划线代替点。例如,1.31.1版本将被标记为“-1_31_1”。
  • .lib 
    扩展名:取决于操作系统。在大多数unix平台上,.a是静态库,.so是共享库。在Windows上,.dll表示共享库,.lib是静态或导入库。

 

下表是对Regex库编译后的文件名:

 

文件名含义编译使用该库的程序时应使用的编译选项
libboost_regex-vc90-mt-sgd-1_38.lib静态库,多线程,调试版本 
使用静态调试版本C运行时库(LIBCMTD.LIB和LIBCPMTD.LIB)
/MTd
libboost_regex-vc90-mt-s-1_38.lib静态库,多线程 
使用静态版本C运行时库(LIBCMT.LIB和LIBCPMT.LIB)
/MT
libboost_regex-vc90-mt-gd-1_38.lib静态库,多线程,调试版本 
使用动态调试版本C运行时库(MSVCRTD.LIB和MSVCPRTD.LIB)
/MDd
libboost_regex-vc90-mt-1_38.lib静态库,多线程 
使用动态版本C运行时库(MSVCRT.LIB和MSVCPRT.LIB)
/MD
boost_regex-vc90-mt-gd-1_38.lib导入库(boost_regex-vc90-mt-gd-1_38.dll),多线程,调试版本 
boost_regex-vc90-mt-1_38.lib导入库(boost_regex-vc90-mt-1_38.dll)多线程 

 

 

需要注意的是,链接时,所使用的Regex库文件名必须和编译选项匹配,否则会造成如下链接错误:

LINK : warning LNK4098: defaultlib '×××××' conflicts with use of other libs; use /NODEFAULTLIB:library

原因是,当编译时,cl.exe(也就是VC的编译器)会根据上述编译选项在编译成的obj文件中植入相应的defaultlib文件名(使用DUMPBIN /DIRECTIVE ***,lib可以查看),如/MT对应的就是LIBCMT.LIB(C)和LIBCPMT.LIB(C++标准库)。当链接器处理该obj文件时,会从文件中取出该defaultlib文件名,将其放在命令行库列表的最后以供使用。对于静态库的处理也是如此,静态库也是由一些obj文件组成的,每个obj文件中也根据当时的编译选项被植入了相应的defaultlib。当链接器处理静态库时,也会将涉及到的obj文件中的defaultlib放在命令行库列表的最后。假设,我们的程序使用/MT编译,那个对应的defaultlib就是LIBCMT.LIB(C)和LIBCPMT.LIB(C++标准库)。而使用的是libboost_regex-vc90-mt-sgd-1_38.lib,它对应的defaultlib就是LIBCMTD.LIB和LIBCPMTD.LIB。链接过程中,链接器会发现采用了不同的运行时库,所以会出现上述错误。

 

幸运的是,Visual C++支持自动链接,当包含Regex的头文件时,Regex会根据当前工程的编译选项(不同的编译选项会定义不同的宏,具体参见上一篇C运行时库)自动告诉编译器将哪个文件送给链接器。

Boost.Regex默认使用的静态链接方式,如果希望使用动态链接方式,如何实现呢? 定义宏BOOST_REGEX_DYN_LINK。要注意,一定要在包含regex头文件之前定义该宏:

#define  BOOST_REGEX_DYN_LINK
#include <boost/regex.hpp>

 

 

 

 

编译64位版本

1) 从开始菜单启动vs2010下的x64 win64 cmd窗口

2) 到BOOST下执行boostrap.bat生成相应版本的bjam

3) bjam.exe --toolset=msvc-10.0 architecture=
x86 address-model=64 link=static --build-type=complete --with-system --with-thre
ad --with-date_time --with-filesystem --with-serialization

 

 

 

vs2013编译boost1.55.0 32/64位

在使用vs2013编译boost-1.55.0之前,先要给boost做下修改:

boost_1_55_0\boost\intrusive\detail\has_member_function_callable_with.hpp line:222

template<class U>
static BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
       <U> Test(BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<U>*);

替换成以下内容:

复制代码

#ifdef BOOST_MSVC
     template<class U>
     static decltype(boost::move_detail::declval<Fun>().BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME()
           , boost_intrusive_has_member_function_callable_with::yes_type())
           Test(Fun*);
#else
     template<class U>
     static BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
           <U> Test(BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<U>*);
#endif

复制代码

 

  • 32位编译:
  1. 从开始菜单启动Visual Studio 2013的vs2013 命令行,进入boost所在目录,运行bootstrap.bat
  2. 编译命令:
bjam.exe stage --toolset=msvc-12.0 --without-graph --without-graph_parallel --without-math --without-mpi --without-serialization --without-wave --without-test --without-program_options --without-serialization --without-signals --stagedir=".\bin\vc12_x86" link=static runtime-link=shared threading=multi debug release

 

  • 64位编译:
  1. 从开始菜单启动Visual Studio 2013的vs2013 x64兼容工具命令行,然后转到boost根文件夹,运行bootstrap.bat生成x64版的bjam.exe。
  2. 运行命令:   
bjam.exe stage --toolset=msvc-12.0 --without-graph --without-graph_parallel --without-math --without-mpi --without-serialization --without-wave --without-test --without-program_options --without-serialization --without-signals --stagedir=".\bin\vc12_x64" link=static runtime-link=shared threading=multi debug release address-model=64  

 

 

 

2019-4-27:

用VS编译BOOST1.7.0的时候,locale库编译错误,增加CXX配置后就可以了

bjam stage --toolset=msvc-12.0 --without-python --stagedir="D:\Workspace\externals\boost_1_70_0\bin\vc12" link=static runtime-link=shared runtime-link=static threading=multi debug release cxxflags=-DBOOST_NO_CXX11_VARIADIC_TEMPLATES

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
### 回答1: Boost是一个流行的C++,是C++标准的一个有益补充。在使用时我们需要注意Boost的版本与编译器的兼容性。 在这里,"msvc14.2"是指Microsoft Visual Studio编译器的版本号。目前而言,最新的msvc(Microsoft Visual C++)版本是14.2,对应于Visual Studio 2019。如果我们想在Visual Studio 2019中使用Boost,我们需要下载适用于该版本的Boost源代码,并在Visual Studio 2019中编译安装。 首先,我们需要从Boost官方网站(https://www.boost.org/)下载最新的Boost源代码。接着,我们需要解压缩下载的代码,并使用Visual Studio 2019打开解压后的文件夹。 然后,在Visual Studio 2019中打开解压后的Boost源代码文件夹,我们可以在其中找到一个名为"bootstrap.bat"的批处理文件。我们需要双击运行该文件,这将会通过运行b2工具,自动为我们生成编译配置。 接下来,我们需要使用命令提示符窗口(Command Prompt)进入到Boost源代码文件夹的根目录,并运行以下命令: ```shell .\b2 ``` 这将会开始编译并安装Boost编译过程可能需要一些时间,取决于你的计算机性能和Boost的组件数量。完成后,我们便成功安装了Boost。 最后,我们可以在Visual Studio 2019中新建一个C++项目,并在项目属性中配置Boost的路径。这样,我们就可以在项目中引入Boost的头文件并使用其中的功能了。 总而言之,对于msvc14.2版本(指Visual Studio 2019)的Boost安装,我们需要下载最新的Boost源代码,并在Visual Studio 2019中编译安装。完成后,我们便可以在项目中使用Boost的功能了。 ### 回答2: Boost是一个开源的C++,提供了许多与C++标准相比还要更强大的功能和工具。MSVC14.2指的是Microsoft Visual C++(MSVC)编译器的版本号。 Boost和MSVC编译器之间的关系是:Boost可以在不同的C++编译器中使用,包括MSVC编译器。而MSVC编译器的版本号14.2表示它属于Visual Studio 2019的一部分,所以在使用Boost时,我们需要根据具体的MSVC版本来选择合适的Boost版本。 对于MSVC 14.2(Visual Studio 2019),可以使用Boost的最新版本。Boost官方网站会提供有关不同版本和编译器之间的兼容性信息。在下载Boost时,我们需要注意选择与我们正在使用的MSVC版本兼容的Boost版本。 在使用Boost之前,我们还需要确保正确配置了MSVC编译器的相关设置。在Visual Studio 2019中使用Boost的过程大致如下: 1. 下载并解压缩Boost的最新版本。 2. 打开Visual Studio 2019,创建一个新项目或打开现有项目。 3. 在项目属性中,选择C/C++ -> 常规,将Boost的include目录添加到附加包含目录中。 4. 在链接器 -> 常规中,将Boostlib目录添加到附加目录中。 5. 在链接器 -> 输入中,将Boost文件(.lib)添加到附加依赖项中。 6. 在代码中,使用#include <boost/...>来引入所需的Boost头文件,并编写相应的代码。 总之,Boost可以与MSVC14.2(Visual Studio 2019)一起使用。需要注意的是选择与MSVC版本兼容的Boost版本,并正确配置项目属性来使用Boost的功能。 ### 回答3: boostmsvc14.2是指适用于Microsoft Visual Studio 2019的boost版本。boost是一个开源的C++扩展,提供了很多功能强大且易于使用的工具和组件,用于增强C++编程的能力。 msvc14.2表示该boost版本适用于使用Microsoft Visual Studio 2019的C++开发环境。Msvc14.2是VS2019的默认工具集版本号,其中msvc表示Microsoft Visual C++,14.2表示Major版本为14,Minor版本为2。 使用boostmsvc14.2可以获得许多优势。首先,boost提供了丰富的函数、类和模板,用于处理各种常见的编程任务,如字符串处理、容器操作、多线程编程等。这些功能可以帮助开发人员提高开发效率,减少代码量,从而提升软件的质量和性能。 其次,boost具有良好的移植性和跨平台性。无论是在Windows、Linux还是其他操作系统上,boost都可以正常工作,并且提供了一致的API接口,确保了代码的可移植性。 此外,boost还支持最新的C++标准,提供了许多新特性和扩展,可以帮助开发人员更好地利用和实践现代C++编程中的新概念和技术。 总结来说,boostmsvc14.2是一套功能强大且适用于Microsoft Visual Studio 2019的C++扩展,可以为开发人员提供更多可能性和便利性,使得他们能够更轻松地开发出高质量、高性能的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值