Soll dies das Beispiel sein:
#include <iostream>
using namespace std;
int main()
{
cout << "Hola, moondo.\n";
}
Es wirft den Fehler:
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
Auch dieses Beispiel:
#include <iostream>
int main()
{
std::cout<<"Hola, moondo.\n";
}
wirft den Fehler:
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
Hinweis: Ich verwende Debian Wheezy.
g++
stattgcc
.gcc
ist für C und gibt Ihnen keinen Zugriff auf die C ++ - Standardbibliothek.gcc -o edit main.o
, weiß es nicht, dassmain.o
C ++ - Startbibliotheken benötigt werden.Antworten:
Kompilieren Sie das Programm mit:
so
cout
ist in der C ++ Standard - Bibliothek, die brauchen würde explizite Verbindungen mit-lstdc++
bei der Verwendunggcc
;g++
verknüpft standardmäßig die Standardbibliothek.Mit
gcc
, (g++
sollte vorgezogen werdengcc
)quelle
gcc
wird gut funktionieren, wenn Sie nur hinzufügen-lstdc++
.-Wall
geben Sie immer an, wenn Sie gcc / g ++ - Befehlszeilenbeispiele angeben. Dies hilft, Noobs frühzeitig in gute Gewohnheiten zu bringen, und spart jedem später Zeit. ;-)std::cout
Teil der Standardvorlagenbibliothek?-Wall
und sogar-Wextra
gewarnt wird, ist entweder ein sehr reales Problem oder eine schlampige Codierung, die sehr einfach behoben werden kann. Die Botschaft hier ist, sich daran zu gewöhnen, dass Sie Compiler-Warnungen als hilfreichen Hinweis darauf betrachten, wo Ihr Code verbessert werden könnte, anstatt als störend. Es gibt hier Hunderte von Fragen zu SO, die überhaupt nicht notwendig gewesen wären, wenn das OP verwendet hätte-Wall -Wextra
.-Werror
verstärkt einfach das.Ja, die Verwendung des
g++
Befehls hat bei mir funktioniert:quelle
./a.out
Makefiles
Wenn Sie mit einem Makefile arbeiten und wie ich hier gelandet sind, dann ist dies wahrscheinlich das, wonach Sie suchen oder:
Wenn Sie ein Makefile verwenden, müssen Sie
cc
wie unten gezeigt ändernzu
quelle