2013-02-12 158 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++标准库,后者则不会。