VS編譯release版本的出現的LNK1104 沒法打開文件「libboost_filesystem-vc140-mt-1_58.lib

最近在用restbed和vs2015作一個項目,debug編譯的沒問題,可是編譯release就有問題,困擾了一天,說下個人出坑過程。html

 

一、我用到了外部的庫 restbed ,首先要想正確編譯過,你的外部連接庫要與工程的連接編譯選項一致。好比:我是X64 release MD連接 在VS2015一下編譯,你在編譯restbed或者其餘的外部庫的時候,也要採起一樣的編譯方式才能順利編譯經過。bootstrap

二、加入boost庫的 include路徑和lib庫的路徑(外部庫的加入工程方式也是如此)多線程

     include頭文件的路徑有兩種方式: ui

     (1)項目屬性頁,VC++目錄 --  包含目錄atom

     (2)項目屬性頁,C/C++常規 -- 附加包含目錄 spa

   加入lib庫的路徑:.net

     (1)項目屬性頁,VC++目錄 --  庫目錄命令行

     (2)項目屬性頁,鏈接器 -- 常規 -- 附加庫目錄線程

 

三、debug編譯經過,release就是編不過,提示錯誤:沒法打開文件「libboost_filesystem-vc140-mt-1_58.libdebug

   

     這種問題,首先你要確認下,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

 

 

 

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

 

若是咱們使用動態的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 這些運行庫的方式。
 
Something From:
 
https://www.cnblogs.com/cuish/p/4175491.html
 https://blog.csdn.net/chengfzy/article/details/52295293 
 
關於MT MD MDD MTD這些:https://www.jianshu.com/p/96d5c4aa403c
相關文章
相關標籤/搜索