GCC 4.8 on Mac OS X v10.8 throws "Undefined symbols for architecture x86_64"

Viewed 80145

I write code like this in my Mac OS X v10.8 (Mountain Lion), and when I use "gcc use_new.cpp -o use_new" to compile it, it throws a wrong message like this:

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

And when I use "g++ use_new.cpp -o use_new" it is OK. How can I fix this?

#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;
}
3 Answers
Related