[英]How to extract boost::filesystem using bcp
我正在嘗試創建包含文件系統模塊的boost庫的子集,因此我可以在項目存儲庫中包含該子集。 我收到鏈接器錯誤,直到我手動復制.lib文件。 我在Windows 7 64位上使用Visual Studio 2013。
我已經使用bcp成功提取了boost / algorithm / string.hpp及其依賴項,使用以下步驟:
從boost.org下載(v 1.57.0)。
提取。
然
bootstrap.bat
然后
b2.exe
(我不知道b2是否對我的目的是必要的。)
通過打開命令提示符來構建bcp工具,我在其中提取了boost存檔,然后運行
bjam tools\\bcp
作為描述在這里 。
通過運行創建boost庫子集
dist\\bin\\bcp.exe algorithm/string.hpp [outdir]
將結果復制到我的項目下的子文件夾中,將boost目錄添加到C ++ include搜索路徑,並構建項目。
...
當我將filesystem或filesystem.hpp添加到上面的命令時(即使我在我自己的源文件中使用--scan選項),並將結果復制到我的項目文件夾,然后嘗試包含“boost / filesystem.hpp“,我明白了
LINK : fatal error LNK1104: cannot open file 'libboost_system-vc120-mt-gd-1_57.lib'
在bcp的輸出中找不到*.lib
文件。 為了構建它,我不得不手動將libboost_system-*.lib
和libboost_filesystem-*.lib
文件從stage \\ lib \\復制到我的項目(並將包含它們的目錄添加到Project Properties - > Configuration Properties - > Linker - >一般 - >附加圖書館目錄)。
這是bcp沒有復制所需內容的預期行為嗎? 還是我錯過了一步? 或者它是一個bcp bug?
bcp只會復制源文件,因此您必須從bcp生成的源樹中再次構建庫。 所以是的,這是預期的行為,是的,你錯過了一步。 :)
我不認為這是bcp本身的錯誤,但生成Boost子集的過程肯定不是特別用戶友好的。 見下文。
如果你得到需要編譯的依賴項(例如boost / system),你還需要包含能夠在新的源代碼樹中構建所需的東西。 依賴關系似乎在Boost版本之間發生了變化,但通過反復試驗我發現1.57你需要在bcp命令中添加build
, bootstrap.bat
, bootstrap.sh
, boostcpp.jam
和boost-build.jam
,所以您可以從新的源代碼樹進行構建:
dist\\bin\\bcp.exe algorithm/string.hpp build bootstrap.bat bootstrap.sh boostcpp.jam boost-build.jam [outdir]
編輯:根據Boost版本,您可能還需要將config
添加到上面的行以防止構建錯誤(由Sebastian Marsching建議)。 - 結束編輯
然后,這確實感覺像構建腳本中的錯誤,您必須在新生成的樹中打開頂級Jamfile並注釋掉或刪除提及/boost/tools/inspect
和/boost/libs/wave/tool
的兩個use-project
行/boost/libs/wave/tool
。 否則,找不到這些目錄的失敗將破壞構建。 當然,另一個選擇是在bcp命令行中包含工具/檢查和波形,但是它們帶來了很多依賴性,所以除非你需要這些特定的工具/庫,否則我不建議這樣做。
然后,您需要為自己的項目添加構建步驟以構建庫,使用與構建完整Boost包相同的過程(即您的步驟3,但在“縮小”的源代碼樹中)。
如果需要,可以將已構建的b2和bjam二進制文件添加到源樹而不是引導步驟,但是只能在可以運行這些二進制文件的平台上構建。
順便說一下,你的第三步中的“b2”部分確實沒有必要。
我在GitHub上分叉了bcp,並編譯了一個二進制bcp
,然后我使用這個二進制bcp從BOOST庫中提取bcp的所有必需的頭文件源文件。 然后我打包了一個獨立的bcp發行版。 (您可以輕松編譯代碼並在Windows或Linux上獲得無依賴的bcp
文件。我在我的分支上提供了幾個下載鏈接。)
此過程可能對您有所幫助,請查看此處了解詳細信息。 我也遇到了鏈接問題,請參閱Boost auto_link是Windows上構建失敗的原因 ,只需注釋掉這個頭文件即可。
Windows MSVC上的鏈接問題是由Boost的自動鏈接行為引起的。 結帳boost/config/auto_link.hpp
以獲取更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.