#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
srand(time(NULL));
cout << rand() << endl ;
return 0;
}
错误消息:
Undefined symbols for architecture x86_64:
"std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in test-c5b4b5.o
"std::__1::ios_base::getloc() const", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in test-c5b4b5.o
"std::__1::basic_ostream<char, std::__1::char_traits<char> >::put(char)", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in test-c5b4b5.o
"std::__1::basic_ostream<char, std::__1::char_traits<char> >::flush()", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in test-c5b4b5.o
"std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(int)", referenced from:
_main in test-c5b4b5.o
"std::__1::cout", referenced from:
_main in test-c5b4b5.o
"std::__1::ctype<char>::id", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in test-c5b4b5.o
"std::__1::locale::~locale()", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in test-c5b4b5.o
"std::terminate()", referenced from:
___clang_call_terminate in test-c5b4b5.o
"___cxa_begin_catch", referenced from:
___clang_call_terminate in test-c5b4b5.o
"___gxx_personality_v0", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in test-c5b4b5.o
Dwarf Exception Unwind Info (__eh_frame) in test-c5b4b5.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
答案 0 :(得分:4)
BLUF:使用g++
,而不是gcc
。
这是链接器错误的示例。您的程序编译得很好 - 例如您可以在错误消息中看到对中间*.o
文件的引用 - 但是它遇到了将事物链接在一起以生成可执行文件的问题 - 链接器无法找到程序所需的许多功能(例如, iostream
库中使用的一些东西。
原因是因为您用于构建程序的命令以使链接器尝试将其构建为 C 程序的方式执行 - 特别是,它仅链接到< em> C 标准库,而不是 C ++ 标准库,这就是它无法找到这些东西的原因。
通过将构建命令更改为使链接器意识到它正在构建C ++程序的命令,错误就会消失。
我自己使用gnu编译器集合遇到了这一点 - 虽然gcc
足够智能编译一个*.cpp
程序作为C ++代码,它仍然试图链接结果作为C程序。因此,您需要使用g++
命令来构建C ++程序。