Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопросы по программированию, Воспросы возникающие в ходе осваивания С 
:(
    Опции темы
codevias
  Дата 1.6.2015, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 1.6.2015

Репутация: нет
Всего: нет



Здравствуйте! Осваиваю программирование и С++ в частности. Надеюсь на содействие.
Тему создал с целью публиковать в ней нубские вопросы и не плодить новых тем.

Вопрос №1: Простейший код HelloWorld.сpp не компилируется GCC в Debian (пишет, что есть ошибки).
Мне сложно понять в чем именно может быть ошибка в ниже описанно элементарном коде на C++.
Код

#include <iostream>
using namespace std;

int main()
{
    std::cout << "Hello Wordl" << std::endl;
    return 0;
}

Но при попытке запустить в терминале команду gcc /home/debian/Experimental/gcc/Hello.cpp -o /home/debian/Experimental/gcc/Hello, 
терминал выводит на экран консоли следующие сообщения об ошибках:

debian@debian:~$ gcc /home/debian/Experimental/gcc/Hello.cpp
/tmp/ccPiPmej.o: In function `main':
Hello.cpp:(.text+0xa): undefined reference to `std::cout'
Hello.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*)'
Hello.cpp:(.text+0x14): 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> >&)'
Hello.cpp:(.text+0x1c): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
/tmp/ccPiPmej.o: In function `__static_initialization_and_destruction_0(int, int)':
Hello.cpp:(.text+0x4a): undefined reference to `std::ios_base::Init::Init()'
Hello.cpp:(.text+0x59): undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status

Не понимаю, что именно не нравится gcc и что оно от меня хочет?

P.S.
Сейчас читаю нубские темы данной ветки форума, поэтому прошу не выражаться и не посылать меня их читать. Спасибо за понимание!
PM MAIL   Вверх
rudolfninja
Дата 1.6.2015, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



Здравствуйте.
Вы перед функцией main объявили компилятору, что хотите использовать функции из пространства имен std:
Код

using namespace std;

После этой строки все стандартные функции будут выполняться из этого пространства имен.
Далее при выводе на экран вы явно указываете, что используете std::cout
Код

std::cout << "Hello Wordl" << std::endl;

Таким образом, компилятор в пространстве имен std пытается найти еще одно пространство имен std, не находит и не знает откуда взять эти функции.
То есть, если вы написали using namespace std, то явно указывать пространство имено перед функцией не надо.  Хотя, если вы только начинаете, то не пытайтесь вникать в пространство имен и область видимости.
Исправьте строку с выводом на экран на такую:
Код

cout << "Hello Wordl" << endl;


Это сообщение отредактировал(а) rudolfninja - 1.6.2015, 15:18
PM MAIL Skype   Вверх
xvr
Дата 1.6.2015, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(rudolfninja @  1.6.2015,  15:13 Найти цитируемый пост)
Таким образом, компилятор в пространстве имен std пытается найти еще одно пространство имен std, не находит и не знает откуда взять эти функции.

Это не поможет. Компилятор достаточно умный, что бы искать не только в namespace'ах, упомянутых в using namespace, но и напрямую от корня.

Ошибка не в программе, а в процессе компиляции. Если приглядется к выдаче с ошибками, то видно, что ошибки валятся не от компиляции, а от линковки.

Исправить это просто:
Код

debian@debian:~$ g++ /home/debian/Experimental/gcc/Hello.cpp

При линковке с помощью gcc он подает на линковку только С библиотеки, а std::cout, который вы использовали, находится в С++ библиотеке. Так что линковать надо с помощью g++

PM MAIL   Вверх
codevias
Дата 1.6.2015, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 1.6.2015

Репутация: нет
Всего: нет



rudolfninja, спасибо за ответ!

Исправил строку в примере как Вы и подсказали, но к сожалению, эффект от запуска и компиляции остался тем же. 
Цитата

debian@debian:~$  gcc /home/debian/Experimental/gcc/Hello.cpp -o /home/debian/Experimental/gcc/Hello
/tmp/ccOWAlOb.o: In function `main':
Hello.cpp:(.text+0xa): undefined reference to `std::cout'
Hello.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*)'
Hello.cpp:(.text+0x14): 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> >&)'
Hello.cpp:(.text+0x1c): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
/tmp/ccOWAlOb.o: In function `__static_initialization_and_destruction_0(int, int)':
Hello.cpp:(.text+0x4a): undefined reference to `std::ios_base::Init::Init()'
Hello.cpp:(.text+0x59): undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status


Сейчас гуглю undefined reference to нашел сообщения на тему некоего Code Blocks, буду читать и разбираться, а то первый камень в начале познания и тот в простейшем примере.. попробую запустить код в visual studio.
PM MAIL   Вверх
rudolfninja
Дата 1.6.2015, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



xvr, спасибо, я вас понял =)

Добавлено @ 15:30
codevias, смотрите что написал xvr.
Исправьте эту строку на 
Код

printf("Hello world\n");

Только сначала подключите stdio.h
Или компилируйте так, как сказал xvr.

Это сообщение отредактировал(а) rudolfninja - 1.6.2015, 15:31
PM MAIL Skype   Вверх
codevias
Дата 1.6.2015, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 1.6.2015

Репутация: нет
Всего: нет



xvr, пробовал вписывать в начале команды g++, но консоль ругается, что такой команды нет.
Цитата

debian@debian:~$ g++ /home/debian/Experimental/gcc/Hello.cpp -o /home/debian/Experimental/gcc/Hello
bash: g++: команда не найдена

GCC устанавливал командой - "aptitude install gcc".

Что такое "линковка"?

rudolfninja, и что у C++ в разных системах разные функции для вывода?  smile 

P.S.
Выбрал дебиан решив, что если справлюсь с освоением этой системы, то и с остальными ubuntu, fedora и прочих проблем не будет,
но как работать с ОС у которой в GCC после установки нет g++ внутри..  smile 

Это сообщение отредактировал(а) codevias - 1.6.2015, 15:37
PM MAIL   Вверх
rudolfninja
Дата 1.6.2015, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



Цитата(codevias @  1.6.2015,  15:31 Найти цитируемый пост)
но как работать с ОС у которой в GCC после установки нет g++ внутри..

Странно, что выбрав debian вы выбрали C++, а не C =)
В большинстве, у пользователе линукса в целом идеология такая, что они C++ редко используют =) Большинстов матерых линукс-программистов пишут на C.
PM MAIL Skype   Вверх
codevias
Дата 1.6.2015, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 1.6.2015

Репутация: нет
Всего: нет



rudolfninja, хочу приложения писать на C++, о системном программировании я не задумывался, когда выбирал Debian, хотел найти альтернативу Windows, которая после долгого использования показалась мне намного приятней, шустрее и лучше. После GCC планировал перейти на qt или что нибудь подобное, конкурента дорогой VS. С освоением того же python, проблем не возникло, его стандартный IDLE работает в debian "без сучка, без задоринки". А вот с C++ вообще беда, но всё равно хочу его, он превосходит Python и компилируемый. Ubuntu и лоли-дистры мне пока не интересны, а то буду как в Windows сидеть, решение проблем в которой - это перезагрузка.

Это сообщение отредактировал(а) codevias - 1.6.2015, 15:49
PM MAIL   Вверх
rudolfninja
Дата 1.6.2015, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



К сожалению, я по линуксу вам не помогу. 
Вот ссылка на g++ для дебиан, попробуйте скачать оттуда.
PM MAIL Skype   Вверх
xvr
Дата 1.6.2015, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



gcc - это целый набор компиляторов. Видимо С++ у базу не входит (точнее компилятор входит, а вот библиотеки видимо нет)
Попробуйте aptitude install g++

PM MAIL   Вверх
codevias
Дата 1.6.2015, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 1.6.2015

Репутация: нет
Всего: нет



rudolfninja, спасибо большое!
xvr, попробовал, заработала шарманка! Скомпилировал и запустил, всё работает.

Всем кому могу презентую плюсик! Не могу, надо 100 постов набить. 
Ничего, время есть, наскребу сотню другую вопросов.  smile 

Это сообщение отредактировал(а) codevias - 1.6.2015, 16:04
PM MAIL   Вверх
baldina
Дата 1.6.2015, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Цитата(codevias @  1.6.2015,  15:02 Найти цитируемый пост)
gcc /home/debian/Experimental/gcc/Hello.cpp

Код

$ make Hello

makefile (в отличие от gcc) по умолчанию знает какие библиотеки подключать
когда ваши проекты станут больше, будете пользоваться какой-нибудь ide, или научитесь писать свои файлы для make
PM MAIL   Вверх
codevias
Дата 1.6.2015, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 1.6.2015

Репутация: нет
Всего: нет



baldina, спасибо, буду знать. Cmake случаем не того же поля ягода?
PM MAIL   Вверх
baldina
Дата 1.6.2015, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



того
PM MAIL   Вверх
konshyn
Дата 1.6.2015, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(xvr @  1.6.2015,  15:53 Найти цитируемый пост)
gcc - это целый набор компиляторов. Видимо С++ у базу не входит 

вообще-то,  gcc - это компилятор С.
а вот GCC (аббревиатура) - это коллекция компиляторов. Туда входят и gcc и g++.
GCC и gcc путают многие.


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.