Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > С++ под Unix и Linux |
Автор: Tuman18 16.9.2016, 19:18 |
Ответьте, пожалуйста, нубу на вопрос: Чем программирование на С++ под Unix отличается от того же под Linux (конкретно, Ubuntu)? Странный вопрос? Сейчас расскажу почему он у меня возник. Появился у нас в универе предмет «основы Unix-подобных систем». Но, видно, универ у нас убогий и нас стали обучать Unix-у на эмуляторе Cygwin установленном под Windows XP... Написали мы три маленькие программки на с++, скомпилировали g++, запустили, работает. Дома эти программки надо доделать согласно вариантов... У меня дома установлена Ubuntu 14.04, да вот беда, программки эти, принесенные с университета, не компилируются, выдают кучу ошибок... Вот и стало интересно, почему так. Или программирование под Unix и Ubuntu отличается или это только под эмулятором другой компилятор или это из-за того что я такой нуб... Знает кто? P.S. Если вина моя, официально разрешаю бить и ругать. |
Автор: _zorn_ 16.9.2016, 20:53 |
Вот и давайте проявлять любопытство (на будущее - система не имеет значения). Ошибки - я понял что вы постеснялись, но именно они указывают что у вас не так. Скорей всего тупо не установлен g++ дома. |
Автор: Tuman18 16.9.2016, 23:04 | ||
Ах да... :)![]() А это то что я пытался скомпилировать.
|
Автор: xvr 16.9.2016, 23:52 |
В программе ошибка - не хватает #include <string.h> То, что на cygwin'е это собралось - чистая случайность (string.h оказался включен через какой то другой include файл). Разные версии компилятора. Запустите g++ --version на обоих системах и сравните версии |
Автор: Tuman18 17.9.2016, 16:10 |
Спасибо! include добавил - ошибки пропали, варнинги остались. Зато теперь компилируется и работает! Версии g++, действительно, очень разные: Ubuntu - 4.8.4, cygwin - 2.95.5/ |
Автор: xvr 17.9.2016, 16:25 |
Версии слишком разные (а cygwin явно слишком древний). А варнинги вполне по делу - не рекомендуется функция gets к применению. Используйте fgets вместо нее |
Автор: bsa 20.9.2016, 11:21 |
Во-первых, речь идет о программе на С++. Тут надо использовать 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 Сколько лет прошло, а в ВУЗах ничего не изменилось. Как было отставание полтора десятка лет, так и осталось... |
Автор: azesmcar 20.9.2016, 11:47 |
ну почему же? сейчас они уже отстают на два десятка лет ;) все меняется... |
Автор: bsa 20.9.2016, 12:45 |
azesmcar, ну сейчас хотя бы cygwin. В мое время (конец девяностых - начало двухтысячных) был Borland C++ 3.0 ![]() |
Автор: Olej 30.11.2016, 18:55 | ||
Ничем. ![]() |
Автор: bankuss 14.12.2016, 08:38 | ||
раз ничем, то тогда такой вопрос: так как недавно перелез на Мак, то решил пару прожек перекомпилить в новой системе. окружение у меня стандартное: xcode + command line tools + clang (так же есть отдельно и gcc), ОС последняя - Sierra. взял исходники программы (она 2001 года, но код универсальный, под разные ОС, писан на чистом Си) залил в проект xcode. исправил небольшие синтаксические ошибки, стал собирать - все скомпилировалось, но линкер вываливает с ошибкой типа Linker Error "duplicate symbol" итд итп (сейчас точно не напишу - проект дома). причем такое чувство что он ВСЕ переменные проекта записал в дубли. запускаю этот проект на linux - все компилируется и собирается нормально. т.е. ошибок в коде нет. (там их и нет -ибо clang компилирует нормально) а вот что нужно линкеру - вообще не ясно. до настроек линкера я так и не добрался, в xcode все как-то запрятано. |
Автор: Olej 17.12.2016, 19:15 | ||
На C (хотя тема здесь про C++) не бывает "универсальный код"! В Linux/UNIX - это POSIX. И только это - C. В Windows то, что называют C - это нонсенс, чёрт знает что... Очевидно, у вас в MacOS - это что-то промежуточное между... ![]() |