2011-11-07 16 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でこれをやっていますが、gccだけではXCodeを使っていません。

+0

どのgccを使用しますか? Macports? Xコード?あなたのパスが台無しに見えるように見えます。 – FFox

答えて

61

エラーは間違ったアーキテクチャではなく、std::cout(およびその他の記号)は定義されていません。

正しいC++ライブラリに自動的にリンクするには、g++ではなくgccをコンパイルしてリンクする必要があります。

+1

ああ、ありがとう!なぜgccは私のために働いていないのですか?私が見ているすべての例はgccを使用しています。 – oskob

+2

@oskobいいえ、gccはCコンパイラ(C++構文を処理しますが)であり、g ++はC++コンパイラですからです。 –

+0

gccが.cc/.cppファイルに遭遇したときにg ++に委譲するフロントエンドではありませんか? – RobH

5

gccでコンパイルしているためにエラーが発生します。これはdefault-linksのlibcのみです。 g++でコンパイルすると、libstdc++も自動的にリンクされます。

0

gccの代わりにg ++を使用して、正確なC++ライブラリとリンクする

+0

これは答えではなくコメントです。そのように投稿するには担当者を入手してください。 –

関連する問題