2011-11-07 144 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

这是一条评论,而不是一个答案。请获得代表发布。 –

相关问题