2013-02-12 156 views
-2

我想在我的Mac上編譯一些C++代碼。我可以使用Xcode中運行它,但是當我試圖從終端使用gcc我得到以下錯誤編譯:試圖在Mac上編譯C++代碼

Undefined symbols for architecture x86_64: 
    "std::cout", referenced from: 
     _main in ccOJDOlb.o 
    "std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from: 
     _main in ccOJDOlb.o 
    "std::ios_base::Init::Init()", referenced from: 
     __static_initialization_and_destruction_0(int, int)in ccOJDOlb.o 
    "std::ios_base::Init::~Init()", referenced from: 
     ___tcf_0 in ccOJDOlb.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

任何人都知道可能什麼呢?

+0

你的命令行是什麼? – juanchopanza 2013-02-12 20:56:30

+0

可能重複[C++:在mac osx上使用std :: cout和gcc的問題](http://stackoverflow.com/questions/2250017/c-problem-using-stdcout-with-gcc-on-a-mac -osx) – 2013-02-12 23:16:27

回答

1

ld: symbol(s) not found for architecture x86_64

這就是說'ld',鏈接器,無法找到您的程序使用的某些符號的定義。所以你知道編譯成功了。

而ld列出了具體的符號。請注意,它們全部來自標準庫。這應該告訴你,標準庫可能沒有被鏈接器找到。

通常,當您使用庫時,必須使用鏈接標誌告訴編譯器工具鏈。但是對於一個語言的標準庫,GNU編譯器集合中的編譯器通常只是假設你需要該語言的庫。因此,運行gcc命令會自動包含C標準庫,運行g ++時會自動包含C++標準庫等。但請注意,運行'gcc'不會自動鏈接到C++標準庫中。很可能你正在運行命令'gcc',而不是爲C++標準庫添加正確的鏈接器標誌。

如果由於某種原因想要使用gcc而不是g ++,則必須明確說明您需要使用標準庫,如-lstdc++


而且,除非你真的想gcc和你在OS X上安裝它自己的最新版本中,你可能想切換到鐺/鐺++和的libC++實現的C++標準庫。 Xcode附帶的gcc是基於舊版本的,標準庫也是舊版本。 Xcode作爲系統編譯器已經過渡到現在的一段時間了。 clang編譯器驅動程序與gcc具有基本的兼容性,因此您可以使用許多相同的基本標誌。這裏有一個很好的開始:

clang++ -std=c++11 -stdlib=libc++ -Wall -Wextra 
1

I try to compile from the terminal using gcc

然後嘗試g++而不是普通的'gcc。前者自動鏈接到C++標準庫,後者則不會。