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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> С++ под Unix и Linux 
:(
    Опции темы
Tuman18
Дата 16.9.2016, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ответьте, пожалуйста, нубу на вопрос: Чем программирование на С++ под Unix отличается от того же под Linux (конкретно, Ubuntu)?

Странный вопрос? Сейчас расскажу почему он у меня возник.

Появился у нас в универе предмет «основы Unix-подобных систем». Но, видно, универ у нас убогий и нас стали обучать Unix-у на эмуляторе Cygwin установленном под Windows XP... Написали мы три маленькие программки на с++, скомпилировали g++, запустили, работает. Дома эти программки надо доделать согласно вариантов... У меня дома установлена Ubuntu 14.04, да вот беда, программки эти, принесенные с университета, не компилируются, выдают кучу ошибок... Вот и стало интересно, почему так. Или программирование под Unix и Ubuntu отличается или это только под эмулятором другой компилятор или это из-за того что я такой нуб... Знает кто?

P.S. Если вина моя, официально разрешаю бить и ругать.
PM MAIL   Вверх
_zorn_
Дата 16.9.2016, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Вот и давайте проявлять любопытство (на будущее - система не имеет значения).
Ошибки - я понял что вы постеснялись, но именно они указывают что у вас не так. 
Скорей всего тупо не установлен g++ дома. 

PM MAIL   Вверх
Tuman18
Дата 16.9.2016, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ах да... :)
user posted image

А это то что я пытался скомпилировать.

Код

#include <iostream>
#include <stdio.h>
#include <cstdio>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#define STOP ""
using namespace std;
struct UNIT
{ char name[20]; int amount;
  float price;} work;
int len = sizeof(UNIT);
int fdesc;
char fname[] = "list";

void sozd()
{
  fdesc=open (fname, O_WRONLY | O_CREAT);
  for(int i=1;i<10;i++)
  { puts ("Введите наименование: ");
  getchar();
    gets (work.name);
    if (strcmp(work.name, STOP) == 0) break;
    puts ("Введите количество и цену: ");
      scanf ("%i%f", &work.amount, &work.price);
    write(fdesc, &work, len);
  }

  close (fdesc);
}

void correct()
{
  char s[20]; float c;
  puts ("Введите наименование: ");
  getchar();
  gets(s);
  puts ("Введите новую цену: ");
  scanf("%f",&c);
  fdesc=open (fname, O_RDWR);
  for(int i=0;i<10;i++)
  { int res = read(fdesc, &work, sizeof(UNIT));
    if (res==0) break;
    if (strcmp(work.name, s) == 0)
      { work.price = c;
        lseek(fdesc, -len, 1);
        write (fdesc, &work, len);
          break;
      }
  }
  close(fdesc);
}

void vyvod()
{
  fdesc=open (fname, O_RDONLY);
  for(int i=0;i<10;i++)
    { int res = read(fdesc,&work, len);
      if (res == 0) break;
      printf ("name=%s; amount=%i; price=%f;\n",
        work.name, work.amount, work.price);
    }
    close(fdesc);
}

int main()
{
int r;
puts ("Режимы работы:");
puts ("1 - создание файла; 2 - корректировка ; 3 - вывод");
puts ("Введите режим: ");
scanf ("%i", &r);
switch (r) {
   case 1 : sozd(); break;
   case 2 : correct(); break;
   case 3 : vyvod(); break; }
}


PM MAIL   Вверх
xvr
Дата 16.9.2016, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



В программе ошибка - не хватает #include <string.h>
То, что на cygwin'е это собралось - чистая случайность (string.h оказался включен через какой то другой include файл). Разные версии компилятора. Запустите g++ --version на обоих системах и сравните версии

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


Новичок



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

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



Спасибо! include добавил - ошибки пропали, варнинги остались. Зато теперь компилируется и работает!
Версии g++, действительно, очень разные: Ubuntu - 4.8.4, cygwin - 2.95.5/
PM MAIL   Вверх
xvr
Дата 17.9.2016, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Версии слишком разные (а cygwin явно слишком древний).
А варнинги вполне по делу - не рекомендуется функция gets к применению. Используйте fgets вместо нее

PM MAIL   Вверх
bsa
Дата 20.9.2016, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Во-первых, речь идет о программе на С++. Тут надо использовать iostream, вместо gets/fgets/open/read/write/scanf/printf...
Во-вторых, подключать надо не string.h, а cstring, так как мы пишем на С++.
В-третьих, open с флагом O_CREAT предполагает наличие третьего параметра, например: S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH

Сколько лет прошло, а в ВУЗах ничего не изменилось. Как было отставание полтора десятка лет, так и осталось...
PM   Вверх
azesmcar
Дата 20.9.2016, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(bsa @  20.9.2016,  11:21 Найти цитируемый пост)
Как было отставание полтора десятка лет, так и осталось.

ну почему же? сейчас они уже отстают на два десятка лет ;) все меняется...
PM   Вверх
bsa
Дата 20.9.2016, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



azesmcar, ну сейчас хотя бы cygwin. В мое время (конец девяностых - начало двухтысячных) был Borland C++ 3.0 smile
PM   Вверх
Olej
Дата 30.11.2016, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Tuman18 @ 16.9.2016,  19:18)
Ответьте, пожалуйста, нубу на вопрос: Чем программирование на С++ под Unix отличается от того же под Linux (конкретно, Ubuntu)?


Ничем. smile 
PM MAIL   Вверх
bankuss
Дата 14.12.2016, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Tuman18 @ 16.9.2016,  19:18)
Ответьте, пожалуйста, нубу на вопрос: Чем программирование на С++ под Unix отличается от того же под Linux (конкретно, Ubuntu)?

Ничем. smile


раз ничем, то тогда такой вопрос:
так как недавно перелез на Мак, то решил пару прожек перекомпилить в новой системе. окружение у меня стандартное: xcode + command line tools + clang (так же есть отдельно и gcc), ОС последняя - Sierra.

взял исходники программы (она 2001 года, но код универсальный, под разные ОС, писан на чистом Си) залил в проект xcode. исправил небольшие синтаксические ошибки, стал собирать - все скомпилировалось, но линкер вываливает  с ошибкой типа Linker Error "duplicate symbol" итд итп (сейчас точно не напишу - проект дома). причем такое чувство что он ВСЕ переменные проекта записал в дубли.

запускаю этот проект на linux - все компилируется и собирается нормально. т.е. ошибок в коде нет. (там их и нет -ибо clang компилирует нормально) а вот что нужно линкеру - вообще не ясно. до настроек линкера я так и не добрался, в xcode все как-то запрятано.
PM MAIL   Вверх
Olej
Дата 17.12.2016, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(bankuss @ 14.12.2016,  08:38)

взял исходники программы (она 2001 года, но код универсальный, под разные ОС, писан на чистом Си)

На C (хотя тема здесь про C++) не бывает "универсальный код"!
В Linux/UNIX - это POSIX. И только это - C.

В Windows то, что называют C - это нонсенс, чёрт знает что...

Очевидно, у вас в MacOS - это что-то промежуточное между... smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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