Why do I get "undefined reference" errors compiling a simple C++ program with gcc?

I try to compile c++ in Ubuntu. I write my code in Gedit, it is the simple hello world project. I go to terminal to run it with gcc helloworld.cc and this message pops up:

/tmp/ccy83619.o: In function `main': helloworld.cc:(.text+0xa): undefined reference to `std::cout' helloworld.cc:(.text+0xf): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)' /tmp/ccy83619.o: In function `__static_initialization_and_destruction_0(int, int)': helloworld.cc:(.text+0x3d): undefined reference to `std::ios_base::Init::Init()' helloworld.cc:(.text+0x4c): undefined reference to `std::ios_base::Init::~Init()' collect2: error: ld returned 1 exit status 

What does it mean and where do I go from here?

1

1 Answer

C++ programs need to be linked with the C++ standard library. Although you could link the standard library manually i.e. gcc -o hello hello.cpp -lstdc++, it's not generally done like that. Instead, you should use g++ in place of gcc, which links libstdc++ automatically.

Ex. given

$ cat hello.cpp #include <iostream> int main(void) { std::cout << "Hello world" << std::endl; return 0; } 

then

$ gcc -o hello hello.cpp /tmp/ccty9cjF.o: In function `main': hello.cpp:(.text+0xa): undefined reference to `std::cout' hello.cpp:(.text+0xf): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)' hello.cpp:(.text+0x14): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)' hello.cpp:(.text+0x1c): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))' /tmp/ccty9cjF.o: In function `__static_initialization_and_destruction_0(int, int)': hello.cpp:(.text+0x4a): undefined reference to `std::ios_base::Init::Init()' hello.cpp:(.text+0x59): undefined reference to `std::ios_base::Init::~Init()' collect2: error: ld returned 1 exit status 

whereas

g++ -o hello hello.cpp $ ./hello Hello world 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like