Undefined Refement to ‘STD :: COUT’

Zal dit het voorbeeld zijn:

#include <iostream>
using namespace std;
int main()
{
    cout << "Hola, moondo.\n";
}

het gooit de fout:

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

Ook dit voorbeeld:

#include <iostream>
int main()
{
    std::cout<<"Hola, moondo.\n";
}

Werp de fout:

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

Opmerking: ik gebruik Debian Wheezy.


Antwoord 1, autoriteit 100%

Compileer het programma met:

g++ -Wall -Wextra -Werror -c main.cpp -o main.o
     ^^^^^^^^^^^^^^^^^^^^ <- For listing all warnings when your code is compiled.

as coutaanwezig is in de C++-standaardbibliotheek, waarvoor expliciete koppelingmet -lstdc++nodig is bij gebruik van gcc; g++koppelt standaard de standaardbibliotheek.

Met gcc, (g++verdient de voorkeur boven gcc)

gcc main.cpp -lstdc++ -o main.o

Antwoord 2, autoriteit 16%

Ja, het gebruik van de opdracht g++werkte voor mij:

g++ my_source_code.cpp

Antwoord 3

Ervan uitgaande dat code.cppde broncode is, zal het volgende geen fouten veroorzaken:

make code
./code

Hier compileert het eerste commando de code en maakt een uitvoerbaar bestand met dezelfde naam, en het tweede commando voert het uit. Het is in dit geval niet nodig om het trefwoord g++op te geven.


Antwoord 4

Makebestanden

Als je met een makefile werkt en je bent hier net als ik beland, dan is dit waarschijnlijk wat je zoekt of:

Als je een makefile gebruikt, moet je ccwijzigen zoals hieronder weergegeven

my_executable : main.o
    cc -o my_executable main.o

naar

CC = g++
my_executable : main.o
    $(CC) -o my_executable main.o

Other episodes