Sera-ce l'exemple:
#include <iostream>
using namespace std;
int main()
{
cout << "Hola, moondo.\n";
}
Il jette l'erreur:
gcc -c main.cpp gcc -o edit main.o main.o: In function `main':
main.cpp:(.text+0xa): undefined reference to `std::cout'
main.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*)'
main.o: In function `__static_initialization_and_destruction_0(int,int)':
main.cpp:(.text+0x3d): undefined reference to `std::ios_base::Init::Init()'
main.cpp:(.text+0x4c): undefined reference to `std::ios_base::Init::~Init()' collect2: error: ld
returned 1 exit status make: *** [qs] Error 1
Aussi, cet exemple:
#include <iostream>
int main()
{
std::cout<<"Hola, moondo.\n";
}
jette l'erreur:
gcc -c main.cpp gcc -o edit main.o main.o: In function `main':
main.cpp:(.text+0xa): undefined reference to `std::cout'
main.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*)'
main.o: In function `__static_initialization_and_destruction_0(int,int)': main.cpp:(.text+0x3d): undefined reference to `std::ios_base::Init::Init()'
main.cpp:(.text+0x4c): undefined reference to `std::ios_base::Init::~Init()' collect2: error: ld
returned 1 exit status make: *** [qs] Error 1
Remarque: j'utilise Debian Wheezy.
g++
au lieu degcc
.gcc
est pour C et ne vous donnera pas accès à la bibliothèque standard C ++.gcc -o edit main.o
il ne sait pas qu'ilmain.o
faudra des bibliothèques de démarrage C ++.Réponses:
Compilez le programme avec:
tel qu'il
cout
est présent dans la bibliothèque standard C ++, qui nécessiterait un lien explicite avec-lstdc++
lors de l'utilisationgcc
;g++
lie la bibliothèque standard par défaut.Avec
gcc
, (g++
devrait être préféré àgcc
)la source
gcc
fonctionnera très bien si vous ajoutez simplement-lstdc++
.-Wall
lorsque vous donnez des exemples de ligne de commande gcc / g ++ - cela aide les noobs à adopter de bonnes habitudes à un stade précoce et fait gagner du temps à tout le monde plus tard. ;-)std::cout
partie de la bibliothèque de modèles standard?-Wall
et même-Wextra
avertir est soit un problème très réel, soit un codage bâclé qui peut très facilement être corrigé. Le message ici est de prendre l'habitude de considérer les avertissements du compilateur comme un pointeur utile vers où votre code pourrait être amélioré, au lieu d'une nuisance. Il y a des centaines de questions ici sur le SO qui n'auraient pas été nécessaires en premier lieu si le PO avait utilisé-Wall -Wextra
.-Werror
renforce simplement cela.Oui, l'utilisation de la
g++
commande a fonctionné pour moi:la source
./a.out
Makefiles
Si vous travaillez avec un makefile et que vous vous êtes retrouvé ici comme moi, alors c'est probablement ce que vous cherchez ou:
Si vous utilisez un makefile, vous devez changer
cc
comme indiqué ci-dessousà
la source