¿Será este el ejemplo?
#include <iostream>
using namespace std;
int main()
{
cout << "Hola, moondo.\n";
}
Lanza el error:
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
Además, este ejemplo:
#include <iostream>
int main()
{
std::cout<<"Hola, moondo.\n";
}
arroja el error:
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
Nota: Estoy usando Debian Wheezy.
g++
lugar degcc
.gcc
es para C y no le dará acceso a la biblioteca estándar de C ++.gcc -o edit main.o
no sabe quemain.o
va a necesitar bibliotecas de inicio de C ++.Respuestas:
Compila el programa con:
como
cout
está presente en la biblioteca estándar de C ++, que necesitaría un enlace explícito con-lstdc++
cuando se usagcc
;g++
enlaza la biblioteca estándar por defecto.Con
gcc
, (g++
debe preferirse agcc
)fuente
gcc
funcionará bien si solo agrega-lstdc++
.-Wall
al dar ejemplos de línea de comandos de gcc / g ++: ayuda a que los novatos adquieran buenos hábitos en una etapa temprana y ahorra tiempo a todos más adelante. ;-)std::cout
parte de la Biblioteca de plantillas estándar?-Wall
e incluso-Wextra
advierte es un problema muy real o una codificación descuidada que se puede solucionar fácilmente. El mensaje aquí es adquirir un hábito en el que consideres que las advertencias del compilador son un indicador útil para mejorar tu código, en lugar de una molestia. Aquí hay cientos de preguntas sobre SO que no habrían sido necesarias en primer lugar si el OP hubiera utilizado-Wall -Wextra
.-Werror
es simplemente reforzar eso.Sí, usar el
g++
comando funcionó para mí:fuente
./a.out
Makefiles
Si está trabajando con un archivo MAKE y terminó aquí como yo, entonces esto es probablemente lo que está buscando o:
Si está utilizando un archivo MAKE, debe cambiarlo
cc
como se muestra a continuacióna
fuente