在MS Visual C++ 2010如何鏈接升壓在一個獨立的靜態庫
我有一個單獨的C++項目在我的解決方案中使用boost和完美工作。
然後我決定將這個項目轉換成一個靜態庫並且創建一個依賴於這個靜態庫的新項目。
現在,我的轉換後的靜態庫生成沒有錯誤和警告(編譯器和鏈接器) 但新項目編譯但不鏈接。
我越來越:
1>LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc100-mt-1_45.lib'
作爲測試我加入了完整的目錄路徑此庫的連接選項...,然後抱怨
1>LINK : fatal error LNK1104: cannot open file 'libboost_date_time-vc100-mt-1_45.lib'
我現在已經添加所有庫的完整路徑,現在可以構建並運行。
我不滿意這個解決方案,因爲:
- 我不希望庫的用戶 擔心在 提升鏈接。
- 這是凌亂
我知道一個答案是創建一個DLL,但有沒有辦法靜態做到這一點,並保持連接我的靜態庫的水平。
編輯:
如果我告訴.exe文件鏈接器忽略升壓庫明確則一切正常,除了.exe文件不應該擔心升壓可言。
/NODEFAULTLIB:"libboost_thread-vc100-mt-1_45.lib" /NODEFAULTLIB:"libboost_date_time-vc100-mt-1_45.lib"
是的,我看到了這個選項,但是不能讓它工作。我將鏈接器輸出增加爲冗長,我發現.lib項目鏈接到boost .obj文件和.exe搜索,並找到boost庫,然後嘗試鏈接到它們。 – T33C 2011-01-19 15:46:23
您可以發佈詳細構建輸出(構建庫時)? boost庫應該在你的lib命令行上。如http://msdn.microsoft.com/en-us/library/e17b885t(v=VS.100).aspx所述,`LIB創建一個包含指定文件中所有對象的庫。因此,當您的.exe鏈接到您的庫時,它不應該需要boost(除非在庫的公共頭文件中包含boost)。 – 2011-01-19 15:55:49
+1感謝Daniel,問題似乎與BOOST自動鏈接庫中的方式有關。它們被視爲defaultlib,並隨着運行時一起被傳播。定義BOOST_ALL_NO_LIB並鏈接到我的.lib中的boost庫中。 – T33C 2011-01-20 10:37:51