1. 程式人生 > >VS編譯release版本的出現的LNK1104 無法開啟檔案“libboost_filesystem-vc140-mt-1_58.lib

VS編譯release版本的出現的LNK1104 無法開啟檔案“libboost_filesystem-vc140-mt-1_58.lib

最近在用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

按照步驟2 把boost加入工程,

 

結果還是提示錯誤,最後最後有一個大坑!!!!

 

如果我們使用動態的boost庫,那我們只能動態的呼叫系統的執行時庫。這裡有個坑,如果我們使用動態庫,靜態方式連結boost,那麼我們得將動態庫的lib檔名稱前面加上lib,vs預設是有的,比如:
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檔名字!!!!!問題解決。   最後的最後大家注意下自己的MT MD 這些執行庫的方式。   關於boost庫編譯比較好的部落格:https://blog.csdn.net/chengfzy/article/details/52295293    關於MT MD MDD MTD這些:https://www.jianshu.com/p/96d5c4aa403c    


&n