簡體   English   中英

如何使用bcp提取boost :: filesystem

[英]How to extract boost::filesystem using bcp

我正在嘗試創建包含文件系統模塊的boost庫的子集,因此我可以在項目存儲庫中包含該子集。 我收到鏈接器錯誤,直到我手動復制.lib文件。 我在Windows 7 64位上使用Visual Studio 2013。

我已經使用bcp成功提取了boost / algorithm / string.hpp及其依賴項,使用以下步驟:

  1. 從boost.org下載(v 1.57.0)。

  2. 提取。

  3.  bootstrap.bat 

    然后

     b2.exe 

    Windows上的入門中所述。

    (我不知道b2是否對我的目的是必要的。)

  4. 通過打開命令提示符來構建bcp工具,我在其中提取了boost存檔,然后運行

     bjam tools\\bcp 

    作為描述在這里

  5. 通過運行創建boost庫子集

     dist\\bin\\bcp.exe algorithm/string.hpp [outdir] 
  6. 將結果復制到我的項目下的子文件夾中,將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-*.liblibboost_filesystem-*.lib文件從stage \\ lib \\復制到我的項目(並將包含它們的目錄添加到Project Properties - > Configuration Properties - > Linker - >一般 - >附加圖書館目錄)。

這是bcp沒有復制所需內容的預期行為嗎? 還是我錯過了一步? 或者它是一個bcp bug?

簡短的回答

bcp只會復制源文件,因此您必須從bcp生成的源樹中再次構建庫。 所以是的,這是預期的行為,是的,你錯過了一步。 :)

我不認為這是bcp本身的錯誤,但生成Boost子集的過程肯定不是特別用戶友好的。 見下文。

答案很長

如果你得到需要編譯的依賴項(例如boost / system),你還需要包含能夠在新的源代碼樹中構建所需的東西。 依賴關系似乎在Boost版本之間發生了變化,但通過反復試驗我發現1.57你需要在bcp命令中添加buildbootstrap.batbootstrap.shboostcpp.jamboost-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM