2012-09-30 61 views
1

我想對Boost庫從Jamfile的鏈接:Boost.Build鏈接

import os ; 
path-constant BOOST_ROOT : [ os.environ BOOST_ROOT ] ; 
use-project /boost : $(BOOST_ROOT) ; 

exe hello : 
      hello.cpp 
      /boost//filesystem 
      /boost//system 
      : 
      <link>static 
      ; 

雖然我可以從控制檯輸出庫編譯看到,連接器輸出的錯誤:

msvc.link bin\msvc-10.0\debug\link-static\hello.exe 
LINK : fatal error LNK1104: cannot open file 'libboost_filesystem-vc100-mt-gd-1_46.lib' 

爲什麼報告有錯誤? I AM從Jamfile的級別鏈接庫,那麼爲什麼圖書館應該是沒有鏈接?據我的理解,如果整個構建過程由Jamfiles控制,那麼應該靜態鏈接庫,並且不應該添加特定於編譯器的標誌(因爲它會使Jamfiles的可移植性降低)。請幫忙。

+1

您可能在使用boost的自動鏈接功能時遇到問題。你可以通過定義'BOOST_ALL_NO_LIB'來禁用它(我想在目標'hello'的要求中加入' BOOST_ALL_NO_LIB'就足夠了)。 – 2012-09-30 20:27:56

+0

哇。似乎工作!但是如何?如果我定義自己的庫目標: lib foo:foo.cpp;和我聯繫,就像增強它然後它的工作。那麼爲什麼在通過Jamfiles進行連接時不能與boost庫一起工作呢? –

+0

也請,把這個答案,所以我可以標記爲答案和關閉線程。謝謝。 –

回答

2

您可能在使用boost的自動鏈接功能時遇到問題。您可以通過定義BOOST_ALL_NO_LIB來禁用它(我認爲將<define>BOOST_ALL_NO_LIB添加到目標hello就足夠了)的要求。

+0

,但是你知道它爲什麼可以與定製庫標記爲目標「lib foo:foo.cpp」一起工作嗎?並不適用於提升? –

+1

@MarcAndreson問題是特定於boost庫的。在頭文件中有一些特殊的代碼可以檢測你的編譯器選項,並試圖使用這些信息自動猜測哪個庫必須與你的程序鏈接,顯然忽略了你手動添加的任何庫。這個過程有時(頻繁?(我沒有使用Visual Studio))失敗,使得連接比沒有這個更困難。 SO中有幾個問題,例如[this one](http://stackoverflow.com/questions/11384521/error-when-compiling-with-boost/)與同樣的問題。 – 2012-09-30 21:42:39