2011-11-07 40 views
32

我想在C++中做一些非常簡單的事情,但是我找不到任何有關如何解決這個問題的信息。即使我剛纔說的書「只編譯和運行程序」。體系結構x86_64的未定義符號:我應該使用哪種體系結構?

TEST.CPP

#include <iostream> 
using namespace std; 

int main() 
{ 
    cout << "Never fear, C++ is here!"; 
    return 0; 
} 

編譯器說:

Undefined symbols for architecture x86_64: 
    "std::cout", referenced from: 
     _main in ccVfJHGs.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 ccVfJHGs.o 
    "std::ios_base::Init::Init()", referenced from: 
     __static_initialization_and_destruction_0(int, int)in ccVfJHGs.o 
    "std::ios_base::Init::~Init()", referenced from: 
     ___tcf_0 in ccVfJHGs.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

我試着像-arch i386-m32標誌編譯但它總是說,這是錯誤的架構。我應該使用哪一個?

我在Mac上這樣做,但不使用XCode,只是gcc。

+0

您使用哪個gcc? MacPorts的?的XCode?看起來你的道路是混亂的。 – FFox

回答

61

錯誤不在於它是錯誤的架構,而是std::cout(和其他符號)未定義。

您應該編譯並鏈接g++而不是gcc,以便自動鏈接到正確的C++庫。

+1

噢,謝謝!爲什麼gcc不爲我工作?我看到的每個例子都是使用gcc,它是一個os x的東西嗎? – oskob

+2

@oskob不,這只是因爲gcc是C編譯器(儘管它處理C++語法),而g ++是C++編譯器。 –

+0

當gcc遇到.cc/.cpp文件時,gcc是不是會委託給g ++的前端? – RobH

5

錯誤是由於您正在編譯gcc而引起的,其中只有默認鏈接libc。 您需要編譯g++,以便libstdc++也自動鏈接。

0

使用g ++而不是gcc鏈接到精確的C++庫

+0

這是一條評論,而不是一個答案。請獲得代表發佈。 –

相關問題