Очень простая программа не работает на C ++? - PullRequest
16 голосов
/ 25 февраля 2012

Не могу понять, почему это не работает ...

Я работаю в Linux

g ++ ничего не делает

gcc печатаетследующее:

/tmp/ccyg7NDd.o: In function `main':
test.cc:(.text+0x14): undefined reference to `std::cout'
test.cc:(.text+0x19): 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*)'
test.cc:(.text+0x21): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
test.cc:(.text+0x29): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
/tmp/ccyg7NDd.o: In function `__static_initialization_and_destruction_0(int, int)':
test.cc:(.text+0x51): undefined reference to `std::ios_base::Init::Init()'
test.cc:(.text+0x56): undefined reference to `std::ios_base::Init::~Init()'
/tmp/ccyg7NDd.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

Код:

#include<iostream>
#include<stdio.h>

int main(){

std::cout<<"test "<<std::endl;
return 0;

};

Ответы [ 6 ]

73 голосов
/ 25 февраля 2012
gcc main.cpp -lstdc++

или

g++ main.cpp
18 голосов
/ 25 февраля 2012

gcc - это компилятор C, вам нужно использовать g++ (или использовать gcc с параметром -lstdc++, как указано другими). Если ничего не напечатано после того, как вы используете g++, это то, что вы имеете в виду, вы должны выполнить скомпилированный двоичный файл после того, как вы его построите (т.е. когда g++ завершится).

main.cpp:

#include<iostream>

int main(){

std::cout<<"test "<<std::endl;
return 0;

};

Сложение:

g++ main.cpp -o main

Выполнение:

./main

Выход:

test 
4 голосов
/ 25 февраля 2012

Это код C ++, поэтому вы должны использовать g ++, а не gcc. Также #include<stdio.h> не нужно

2 голосов
/ 25 февраля 2012

Я думаю, что вы ошибочно связываетесь с командой компилятора C вместо команды компилятора C ++.Попробуйте это:

g ++ test.cc -o test

0 голосов
/ 29 августа 2014

Я думаю, что основная проблема заключается в том, что двоичное имя «test» на самом деле уже отделено от системы Linux. Ввод "man test" отображает руководство для тестового двоичного файла. У меня была ТОЧНАЯ та же проблема. Это было решено просто путем компиляции двоичного файла в нечто отличное от «test».

0 голосов
/ 25 февраля 2012

Компиляторы разделяют пробелами. Поставьте пробел между всеми ключевыми словами и <<. Поэтому cout << должен быть cout <<. То же самое с <

...