windows下boost庫編譯

工具: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"

此時修改工程屬性:

再次運行,問題解決。

詳情參見:https://docs.microsoft.com/en-us/cpp/build/reference/rtc-run-time-error-checks?redirectedfrom=MSDN&view=vs-2019

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章