2012-08-07 11 views
23

すべてを投げ、私のMac OS X 10.8でこのようなコードを書いています。そして、 "gcc use_new.cpp -o use_new"を使ってコンパイルするとMAC OS X 10.8でgcc 4.8が "x86_64アーキテクチャ用の未定義シンボル:"

Undefined symbols for architecture x86_64: 
    "std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))", referenced from: 
     _main in ccr2vrRQ.o 
    "std::basic_ostream<char, std::char_traits<char> >::operator<<(void const*)", referenced from: 
     _main in ccr2vrRQ.o 
    "std::basic_ostream<char, std::char_traits<char> >::operator<<(double)", referenced from: 
     _main in ccr2vrRQ.o 
    "std::basic_ostream<char, std::char_traits<char> >::operator<<(int)", referenced from: 
     _main in ccr2vrRQ.o 
    "std::basic_ostream<char, std::char_traits<char> >::operator<<(unsigned long)", referenced from: 
     _main in ccr2vrRQ.o 
    "std::ios_base::Init::Init()", referenced from: 
     __static_initialization_and_destruction_0(int, int) in ccr2vrRQ.o 
    "std::ios_base::Init::~Init()", referenced from: 
     __static_initialization_and_destruction_0(int, int) in ccr2vrRQ.o 
    "std::cout", referenced from: 
     _main in ccr2vrRQ.o 
    "std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)", referenced from: 
     _main in ccr2vrRQ.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 ccr2vrRQ.o 
    "operator delete(void*)", referenced from: 
     _main in ccr2vrRQ.o 
    "operator new(unsigned long)", referenced from: 
     _main in ccr2vrRQ.o 
ld: symbol(s) not found for architecture x86_64 
collect2: error: ld returned 1 exit status 

をし、私が使用したときに、「G ++ use_new.cpp -o use_new」私を助けることができる人、OKです!?:が、それはこのように誤ったメッセージをスローしますありがとうございました!

#include <iostream>  
    struct fish    
    { 
     float weight; 
     int id; 
     int kind;    
    }; 
    int main()    
    { 
     using namespace std; 
     int* pt = new int;  
     *pt = 1001;    
     cout<<"int: "<<*pt<<"in location: "<<pt<<endl; 
     double* pd = new double; 
     *pd = 100000001.0;  
     cout<<"double: "<<*pd<<"in location: "<<pd<<endl; 
     cout<<"int point pt is length "<<sizeof(*pt)<<endl; 
     cout<<"double point pd is length "<<sizeof(*pd)<<endl; 
     delete pt;    
     delete pd;    
     cout<<(int *)"How are you!"<<endl; 
     return 0; 
    } 
+0

「i686-apple-darwin11-llvm-gcc-4.2(GCC)4.2.1」と同様の問題があり、「Hello world」プログラムをコンパイルしようとしています。賞金を稼ぎました。 – Randomblue

+2

これは1つのフォームまたは別の何度も何度も質問されています(例:[here](http://stackoverflow.com/questions/5590983/problem-occurred-while-compiling-a-cpp-program-in-gcc) 、[ここ](http://stackoverflow.com/questions/1221902/programs-compiles-in-g-but-exits-with-linker-errors-in-gcc?rq=1)または[here](http: //stackoverflow.com/questions/8904722/gcc-linker-cant-find-standard-library))。 [g ++とgccの違いは何ですか?](http://stackoverflow.com/questions/172587/what-is-the-difference-between-g-and-gcc)を読んで恩恵を受けるでしょう。 – Troubadour

答えて

5

このstackoverflowの質問への答えは

gcc and g++ linker

使用し

gcc -lstdc++ use_new.cpp -o use_new 

-lstdc++フラグはC++標準ライブラリ

を含むようにリンカに指示します答えを持っています

私は、Mac OS X 10.7.4を実行していると、ライブラリがここに置かれ

/usr/lib/libstdc++.dylib 
+0

ありがとうございます。それは動作します。あなたはその旗を詳しく教えていただけますか? – Randomblue

+0

リンカにC++標準ライブラリを含めるように指示し、それを含むように編集します。 – amdn

66

これは私が私の非公式のiOSツールチェーンをセットアップするときに、古い4.2 GCCは(私はこれを経験してもしそうです)。 gccはデフォルトではCとみなされ、C++標準ライブラリにリンクせずにリンカを呼び出します。対照的に、g++はC++を想定しており、デフォルトでC++標準ライブラリとリンクしています。

すべてのすべて - 可能な解決策:

gcc myprog.c -o myprog -lstdc++ 

または

g++ myprog.c -o myprog 
+0

私は参照してください。より新しいバージョンのGCCを使うことをお勧めしますか? – Randomblue

+0

@Randomblue GCCの最新バージョンはなく、さらには4.8が開発中です。リンクに '-lsdtC++'を使うか、もっと良い方法をとってください:リンクにg ++を使います。 –

+0

賞金をいただきありがとうございます。 –

3

これは、@ user1582840ちょうど私の2セントで貼り付けたコードに関連していない、との別の原因から

OS X 10.8/Darwin11でg ++ 4.2.1を使用しているときに "architecture:x86_64"の "ld:symbol"が見つかりませんでした。理由がある。うまくいけば、これは問題のGoogleを検索するのに役立ちます。

私は、クラス定義で、私はメンバー関数を宣言したクラス定義を持っていたので、私はこのエラーを受け取りました。しかし、私がメンバー関数を定義したとき、私はクラス修飾子を含めるのを忘れてしまった。私は(コードサンプルではなく、完全なプログラム)について話しているものの例のためにそう

class NewClass 
{ 
    NewClass(); // default constructor 
}; 

NewClass()コンストラクタ(または任意のメンバ関数)を定義するときその後、私は単に持っていました:

// don't do this, it will throw that error!! 
NewClass() 
{ 
    // do whatever 
} 

いうより:

// proper way 
NewClass::NewClass() 
{ 
    // do whatever 
} 

これはかなり単純なミスで、私はトンを管理o幸いなことに短い時間でそれをキャッチしますが、誰かが見逃しやすい(私たち初心者特に)、gcc/g ++リンカー、Xcodeなどのソリューションこのための助けではありません:P

再び、それが助けてくれることを願っています!

関連する問題