web-dev-qa-db-fra.com

Pourquoi ai-je des erreurs de "référence non définie" lors de la compilation d'un programme C ++ simple avec gcc?

J'essaie de compiler c ++ dans Ubuntu. J'écris mon code dans Gedit, c'est le projet simple hello world. Je vais au terminal pour l'exécuter avec gcc helloworld.cc et ce message apparaît:

/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

Qu'est-ce que cela signifie et où dois-je aller d'ici?

3
Tzikos

Les programmes C++ doivent être liés à la bibliothèque standard C++. Bien que vous pourriez lier manuellement la bibliothèque standard, à savoir gcc -o hello hello.cpp -lstdc++, ce n’est généralement pas le cas. Au lieu de cela, vous devriez utiliser g++ à la place de gcc, qui lie libstdc++ automatiquement.

Ex. donné

$ cat hello.cpp
#include <iostream>

int main(void) { std::cout << "Hello world" << std::endl; return 0; }

puis

$ 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

tandis que

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