Este deve ser o exemplo:
#include <iostream>
using namespace std;
int main()
{
cout << "Hola, moondo.\n";
}
Ele lança o erro:
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
Além disso, este exemplo:
#include <iostream>
int main()
{
std::cout<<"Hola, moondo.\n";
}
lança o erro:
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: Estou usando o Debian Wheezy.
g++
vez degcc
.gcc
é para C e não lhe dará acesso à biblioteca padrão do C ++.gcc -o edit main.o
, não sabe quemain.o
precisará das bibliotecas de inicialização do C ++.Respostas:
Compile o programa com:
como
cout
está presente no C ++ biblioteca padrão, que precisaria de ligação explícita com-lstdc++
quando se usagcc
;g++
vincula a biblioteca padrão por padrão.Com
gcc
, (g++
deve ser preferidogcc
)fonte
gcc
funcionará bem se você apenas adicionar-lstdc++
.-Wall
ao fornecer exemplos de linha de comando gcc / g ++ - isso ajuda a colocar os noobs em bons hábitos desde o início e economiza tempo a todos mais adiante. ;-)std::cout
parte da Biblioteca de modelos padrão?-Wall
e até-Wextra
alertar é um problema muito real ou uma codificação desleixada que pode ser facilmente corrigida. A mensagem aqui é criar um hábito em que você considera os avisos do compilador um ponteiro útil para onde seu código pode ser aprimorado, em vez de um incômodo. Existem centenas de perguntas aqui no SO que, em primeiro lugar, não seriam necessárias se o OP tivesse usado-Wall -Wextra
.-Werror
está simplesmente reforçando isso.Sim, usando o
g++
comando funcionou para mim:fonte
./a.out
Makefiles
Se você está trabalhando com um makefile e acabou aqui como eu, provavelmente é o que está procurando ou:
Se você estiver usando um makefile, precisará alterar
cc
conforme mostrado abaixopara
fonte