2016-10-28 8 views
0
#include <iostream> 
#include <cstdlib> 
#include <ctime>  
using namespace std; 


int main() 
{ 
    srand(time(NULL)); 
    cout << rand() << endl ; 
    return 0; 
} 

エラーメッセージ:なぜこの単純なC++コードはコンパイルされませんか?

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) 
+2

どのコンパイラを使用していますか? – user985030

+1

'main'の本体を削除してもエラーは発生しますか? – Carcigenicate

+1

* hello world *はコンパイルされますか?そうでなければ、あなたのコンパイラがfubar'dのように見えます – NathanOliver

答えて

4

BLUF:gccg++を使用していません。

これは、リンカーの例です。エラーです。あなたのプログラムは細かくコンパイルされました—エラーメッセージ—の中の中間の*.oファイルへの参照を見ることができますが、実行可能ファイルを作るために物事をリンクする問題に遭遇しました—リンカはプログラムで必要な多くの機能を見つけられませんでしたiostreamライブラリー)。

あなたがプログラムを構築するために使用されるコマンドは、リンカがCプログラム特に—としてそれを構築しようと作られた方法でそれをやったので、理由があり、それだけでC標準ライブラリをリンクして、C++標準ライブラリではありません。そのため、これらのものを見つけることができませんでした。

ビルドコマンドをリンカーがC++プログラムを構築していることを認識させるように変更すると、エラーはなくなります。

gccは、C++コードとしてに*.cppプログラムをコンパイルに十分スマートですしながら、私は自分自身は、GNUコンパイラコレクション—を使用してこのに実行した、それはまだCプログラムとして結果をリンクしようとします。したがって、g++コマンドを使用してC++プログラムをビルドする必要があります。

関連する問題