工具:vs2013_update5 + boost_1_70_0
编译前首先了解编译选项MT、MTd、MD、MDd,msdn上面的解释为:
MT:mutithread,多线程库,编译器会从运行时库里面选择多线程静态连接库来解释程序中的代码,即连接LIBCMT.lib库
MTd:mutithread+debug,多线程调试版,连接LIBMITD.lib库
MD:MT+DLL,多线程动态库,连接MSVCRT.lib库,这是个导入库,对应动态库为MSVCRT.dll
MDd: MT+DLL+debug,多线程动态调试库,连接MSVCRTD.lib库,对应动态库为MSVCRTD.dll
对于MT/MTd,由于连接运行时库是LIBCMT.lib/LIBCMTD.lib,这两个库是静态库,所以此种方式编译的程序,移到另一台机器上面也可以正常运行。
对于MD/MDd,连接的是动态库,所以如果另一台机器上没有MSVCRT.dll/MSVCRTD.dll时,就提示缺少动态库这样的错误。
开发多线程程序时(单线程本文不做讨论),需要选择MT、MTd、MD、MDd其中的一个。
了解的以上即可选择合适的版本进行编译。
前往boost官网下载boost1.70.
下载完成功后解压释放到C:\boost1.70.0,使用VS2013工具运行bootstrap.bat或者直接用Cmd也可。
执行完成
此时会在文件夹中生成2个文件:
然后执行:
查看对应配置:
根据此,可以选定合适版本进行编译:
编译32位静态MT库:
b2 variant=release link=static runtime-link=static threading=multi
其它版本组合可自行设定选择,等待编译完成。
编译完成后加入工程中,因为编译的为MT版本库,所以需要更改工程属性
完成后写个测试代码测试一下
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/array.hpp>
#include <boost/array.hpp>
#include <iostream>
#include <sstream>
std::stringstream ss;
void save()
{
boost::archive::text_oarchive oa(ss);
boost::array<int, 3> a = { 0, 1, 2 };
oa << boost::serialization::make_array(a.data(), a.size());
}
void load()
{
boost::archive::text_iarchive ia(ss);
boost::array<int, 3> a;
ia >> boost::serialization::make_array(a.data(), a.size());
std::cout << a[0] << ", " << a[1] << ", " << a[2] << std::endl;
}
int main()
{
save();
load();
}
点击运行,工程报错:
在不指定调试运行时的情况下使用/rtc选项将导致链接器错误。
fatal error C1189: #error : "Incompatible build options"
此时修改工程属性:
再次运行,问题解决。