2012-12-04 43 views
1

我一直在試圖獲得一個簡單的C++程序運行,它給了我作爲多線程編程的一個例子。我知道它運行在安裝了boost的另一臺機器上,但我試圖在Xcode中運行它,這給我一些問題。鏈接器錯誤與提升線程在C++中的Xcode

首先我試着用我現有的boost版本來運行它。然而,我收到了很多錯誤,並且在做了一些研究之後,發現我需要將升級版本從1.47更新到1.52,以修復1.47中包含的一些已知線程錯誤。

固定了我的許多錯誤,但仍然拋出一些。所以我發現我不得不使用這裏找到補丁來修補1.52:https://svn.boost.org/trac/boost/attachment/ticket/7671/libcpp_c11_numeric_limits.patch

之後這一切,我仍然得到鏈接錯誤說:「圖書館沒有找到-lboost_thread」

眼下在Xcode中,我有以下項目設置: 在搜索路徑下,我將頭部和庫搜索路徑設置爲「usr/local/include /」 - - 在鏈接下,我將其他鏈接程序標誌設置爲「-lboost_thread」

I有一個lboost_thread.a和一個位於usr/local/lib /中的lboost_thread.dylib。我該如何讓xCode找到它,因爲看起來應該解決我的問題。

而且如果它幫助這裏是我運行的代碼: Error

圖像顯示在文件中它的位置:錯誤的

#include <iostream> 
#include <boost/thread.hpp> 

using namespace std; 

void printNum(char c, int num) 
{ 
    for(int i = 0; i < num; i++) 
    { 
     cout << c << i << endl; 
    } 
} 

int main() 
{ 
    cout << "Boost threads!" << endl; 
    boost::thread t(printNum, 'b', 100); 
    printNum('a', 100); 
    cout << "Good bye!" << endl; 
} 

圖片 libboost_thread.a

圖片顯示我的建立設置: xCode build settings

+0

如果您使用的是最新的Xcode的版本,你可以設置標準庫到libC++和使用C++ 11''庫,而不是提振。 – bames53

+0

你說你有lboost_thread.a和lboost_thread.dylib。名稱應該是libboost_thread.a和libboost_thread.dylib。 – JWWalker

+0

@JWWalker他們是,我只是輸入他們錯了。 – tknickman

回答

1

我不知道爲什麼鏈接程序沒有找到庫,但我可以告訴你如何規避庫搜索的問題:將完整路徑/usr/local/lib/libboost_thread.a添加到其他鏈接程序標誌構建設置,不帶-l或-L。

+0

試過這個,但仍然沒有骰子。我更新了我的問題,其中包含位置文件的兩張圖片,以及我更改了構建設置的內容。有任何想法嗎?謝謝您的幫助。 – tknickman

+1

您的圖像顯示了項目級別的構建設置。目標級別的構建設置會覆蓋項目級別,因此請確保您所需的設置不會被覆蓋。 (順便說一下,使用/ usr/local/include作爲庫搜索路徑沒有意義,但我認爲這不是一個重大問題。) – JWWalker

+0

仍然無法正常工作。此外,我只是在命令行中編譯這個以確保它在那裏工作,並用「g ++ -g -Wall -lboost_thread -lboost_system -o test dijkstras.cc」編譯它。我嘗試添加-lboost_thread和-lboost_system到目標級別的其他鏈接標誌部分,並仍然拋出相同的錯誤。 – tknickman

0

你的截圖說/usr/local/lib/libboost_thread.a建議是使用-I/usr/local/lib/libboost_thread.a也許這是事情。