2009-12-10 23 views
7

假設您想構建Boost「入門」示例並使用Xcode項目鏈接到它們,而不是在命令行構建。您嘗試只有標題選項,它工作正常。如何使用XCode構建boost「入門」示例?

但後來你把示例源:

#include <boost/regex.hpp> 
#include <iostream> 
#include <string> 

int main() 
{ 
    std::string line; 
    boost::regex pat("^Subject: (Re: |Aw:)*(.*)"); 

    while (std::cin) 
    { 
     std::getline(std::cin, line); 
     boost::smatch matches; 
     if (boost::regex_match(line, matches, pat)) 
      std::cout << matches[2] << std::endl; 
    } 
} 

而你做到以下幾點:

  1. 使用./bjam安裝
  2. 打開Xcode和創建一個新的C編譯Boost庫++命令行實用程序項目。
  3. 將libboost_regex.dylib到在組&文件樹視圖中的產品目錄(檢查,允許它複製文件的選項)
  4. 設置項目選項,使頭搜索路徑指向升壓包括文件夾
  5. 構建並運行該項目!

可悲的是,如果你已經打開(運行|控制檯)控制檯,你會看到一個錯誤,它無法找到dylib:

dyld: Library not loaded: libboost_regex.dylib 
    Referenced from: /Users/matt/Documents/Boost/test/GettingStarted/build/Debug/GettingStarted 
    Reason: image not found 

所以,不知道更好的辦法要讓Xcode執行此操作,您需要將dylib複製到your_project/build/debug /中,然後運行!萬歲!

,你是,你輸入一些東西到標準中來嘗試一下注重細節的人:

> Subject: foo bar baz 
> foo bar baz 

然後它出現segfaults。

Program received signal: 「EXC_BAD_ACCESS」. 

ACK!

但是不要害怕。我知道問題是什麼!如果沒有人打敗我,我會在午飯後發佈解決方案。

回答

2

的這裏的問題是,提升的缺省構建並不在項目的調試版本中打出好成績。你需要使用的調試版本,這是這樣做是爲了建立升壓:

./bjam install variant=debug define=_GLIBCXX_DEBUG --with-regex 

_GLIBCXX_DEBUG實際上是在導致衝突的Xcode項目的選項。

然後你就可以用你的調試Xcode項目鏈接庫的調試版本。 (我認爲這是如何預編譯的二進制的MacPorts的生產。)

請記住,你可以使用bjam的變異,同時建立多個目標。

另外:如果不重建工作後,檢查並確保你與鏈接庫的版本實際上是你剛剛重建了一個!

另外:相反,它可能工作刪除_GLIBCXX_DEBUG從調試配置定義。雙擊目標中的可執行文件以打開項目選項,然後從預處理器宏中刪除_GLIBCXX_DEBUG

希望這會有所幫助。

1

我有同樣的錯誤。我忘了創建「複製文件」構建階段並複製框架。

進去Project Navigator中的第一個按鈕,以顯示你的文件

點擊你的項目編輯項目設置 點擊你正在使用升壓LIB在 目標單擊「添加構建階段」按鈕在右下角 選擇「添加複製文件」 更改「目的地」,在彈出來「框架」 拖動從項目導航到複製文件表

的libboost_regex.dylib圖像鏈接不爲屏幕截圖工作: http://imgur.com/a/8ojye#6

+0

我想如果沒有發生拷貝,它可能會鏈接一個不同的(非調試)版本的庫,這將解釋爲什麼添加複製步驟修復它。 – 2012-02-01 15:21:33