C++ 为什么这个简单的c++;代码不可编译? #包括 #包括 #包括 使用名称空间std; int main() { srand(时间(空)); cout
BLUF:使用C++ 为什么这个简单的c++;代码不可编译? #包括 #包括 #包括 使用名称空间std; int main() { srand(时间(空)); cout,c++,C++,BLUF:使用g++,而不是gcc 这是链接器错误的一个示例。您的程序编译得很好-例如,您可以在错误消息中看到对中间*.o文件的引用-但它在将事物链接到一起以生成可执行文件时遇到问题-链接器找不到程序所需的许多函数(例如,iostream库中使用的一些东西) 原因是因为你用来构建程序的命令是这样做的,它使得链接器试图将它构建成C程序——特别是,它只是链接到C标准库,而不是C++标准库,这就是为什么它不能找到这些东西。 通过将生成命令更改为链接器知道它正在构建C++程序,错误就消失了。 我自己使用
g++
,而不是gcc
这是链接器错误的一个示例。您的程序编译得很好-例如,您可以在错误消息中看到对中间*.o
文件的引用-但它在将事物链接到一起以生成可执行文件时遇到问题-链接器找不到程序所需的许多函数(例如,iostream
库中使用的一些东西)
原因是因为你用来构建程序的命令是这样做的,它使得链接器试图将它构建成C程序——特别是,它只是链接到C标准库,而不是C++标准库,这就是为什么它不能找到这些东西。
通过将生成命令更改为链接器知道它正在构建C++程序,错误就消失了。
<>我自己使用GNU编译器集合来完成这个操作,而
BLUF:使用<代码> G++<代码>,而不是<代码> GCC > 这是链接器错误的一个示例。您的程序编译得很好-例如,您可以在错误消息中看到对中间
*.o
文件的引用-但它在将事物链接到一起以生成可执行文件时遇到问题-链接器找不到程序所需的许多函数(例如,iostream
库中使用的一些东西)
原因是因为你用来构建程序的命令是这样做的,它使得链接器试图将它构建成C程序——特别是,它只是链接到C标准库,而不是C++标准库,这就是为什么它不能找到这些东西。
通过将生成命令更改为链接器知道它正在构建C++程序,错误就消失了。
<>我自己使用GNU编译器集合来完成这个操作,而
main
的主体。您在构建时是否使用命令clang
或clang++
?链接时存在差异。这不是编译错误,而是链接器错误。您需要提供更多详细信息(例如,用于构建程序的命令和版本)我认为编译的方式是链接器认为它是在构建C程序而不是C++程序。试试<代码> g++< /COD>而不是<代码> GCC < /代码>。你使用什么编译器?如果删除了代码<主体> <代码>,是否仍然发生错误。ILD?链接时会有差异。这不是编译错误,而是链接器错误。您需要提供更多详细信息(例如,用于生成程序的命令和版本)我认为你编译它的方式是链接器认为它正在构建C程序,而不是C++程序。试试<代码> G++<代码>,而不是<代码> GCC < /C>。
#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)