最近在用restbed和vs2015做一個項目,debug編譯的沒問題,但是編譯release就有問題,困擾了一天,說下我的出坑過程。
1、我用到了外部的庫 restbed ,首先要想正確編譯過,你的外部鏈接庫要與工程的鏈接編譯選項一致。比如:我是X64 release MD鏈接 在VS2015一下編譯,你在編譯restbed或者其他的外部庫的時候,也要采取同樣的編譯方式才能順利編譯通過。
2、加入boost庫的 include路徑和lib庫的路徑(外部庫的加入工程方式也是如此)
include頭文件的路徑有兩種方式:
(1)項目屬性頁,VC++目錄 -- 包含目錄
(2)項目屬性頁,C/C++常規 -- 附加包含目錄
加入lib庫的路徑:
(1)項目屬性頁,VC++目錄 -- 庫目錄
(2)項目屬性頁,連接器 -- 常規 -- 附加庫目錄
3、debug編譯通過,release就是編不過,提示錯誤:無法打開文件“libboost_filesystem-vc140-mt-1_58.lib
這種問題,首先你要確認下,debug和release的工程屬性頁是否都是正確配置:
再確認下所引用的外部庫,是否是以debug或者release的形式編譯的。
這些都沒問題,還是會提示錯誤無法打開文件“libboost_filesystem-vc140-mt-1_58.lib
好了 這個時候你就需要編譯boodt庫了
登陸boost官網;www.boost.org 找到提示錯誤的boost版本,下載 解壓,
運行bootstrap.bat文件,等這個批處理處理完。
在VS所在的環境 比如 VS2015 X86 這種 打開命令行,進入boost的根目錄,執行命令:bjam --build-type=complete toolset=msvc-14.0 threading=multi link=shared address-model=64
編譯完,就有了lib和頭文件。
上面的命令是簡化版本的比較方便,還有詳細的命令:
address-model: 如果沒有這個參數,是生成32位的平台庫,=x64是生成x64的平台庫
–toolset=msvc-14.0: 編譯器,比如msvc-14.0(VS2015),可選的還有gcc, borland等
link:生成動態鏈接庫(=static)/靜態鏈接庫(=shared)
runtime-link:動態/靜態鏈接C++運行庫,有shared和static兩種方式
threading=multi:單/多線程編譯,一般寫多線程,直接指定為multi
--stagedir參數 表示生成目錄的存放目錄
按照步驟2 把boost加入工程,
庫名字的識別:
boost中為每個庫編譯了4中C/C++鏈接方式的靜態鏈接庫
① /MT /MTd
bjam stage --toolset=msvc-10.0 --build-type=complete --stagedir="H:\Boost\boost_1_57_0\bin\vc10" link=static runtime-link=static threading=multi debug release
生成的庫名字格式
/MT: libboost_atomic-vc100-mt-s-1_57.lib /MTd: libboost_atomic-vc100-mt-sgd-1_57.lib
② /MD /MDd
bjam stage --toolset=msvc-10.0 --build-type=complete --stagedir="H:\Boost\boost_1_57_0\bin\vc10" link=static runtime-link=shared threading=multi debug release
生成的庫文件名字格式
/MD: libboost_atomic-vc100-mt-1_57.lib /MDd: libboost_atomic-vc100-mt-gd-1_57.lib
結果還是提示錯誤,最后最后有一個大坑!!!!
release 和 x64 和 MD
libboost_date_time-vc141-mt-x64-1_69.lib
我們需要的是
libboost_date_time-vc141-mt-x64-1_69.lib
動態庫生成的是
boost_date_time-vc141-mt-x64-1_69.lib
boost_date_time-vc141-mt-x64-1_69.dll
所以我們得改文件名字了。 修改lib文件名字!!!!!問題解決。