Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.86] |
|
Страницы: (5) [1] 2 3 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Всем привет!
У меня тут подработка наклюнулась, в одну контору на C++. Проблема даже не в том, что именно ++ я не знаю (там стажировка на лето, ещё 10 раз выучу). Проблема в том, что нужно сразу сдать тестовое задание. И самое сложное из задания - это чтобы оно должно компилироваться cmake или make с gcc под линукс. До сего дня я жил в уверенности, что Собственно вопрос. Как нормально установить gcc под винду, в IDE Visual Code Studio. Просто по инету шариться - это уйму времени потеряешь, пока найдешь верный вариант. И как сделать чтобы программы (а их две, многопоточные и взаимодействующие между собой) компилировались с помощью make и cmake? Задание я и сам сделаю, но остаются неясные моменты (я конечно их могу загуглить, но буду очень признателен за сэкономленное время): 1) потоки в C++ создаются через std::thread? 2) Потоком можно сделать класс? Точнее экземпляр класса? Есть какие то тонкости? 3) какие стандартные средства есть для синхронизации доступа к данным между потоками? Просто я в винде всю жизнь использовал мьютексы и семафоры, а вот что есть в ++ даже не представляю. 4) основная проблема: как передать данные из одной программы в другую, чтобы работало и на винде и на линуксе? Я не пишу что за задание, поскольку хочу сделать сам. Но если кому интересно, буду признателен за помощь в описании классов. Просто на мой взгляд задание настолько простое, что ООП там совершенно не нужно. Но в задании чётко сказано: Цитата И для меня это действительно головная боль Не обязательно все размещать в одном классе. Может быть разработана иерархия классов. Чем более функционален интерфейс класса, тем лучше. |
Сообщ.
#2
,
|
|
|
А может начать с чего по "проще". Например, установить под Windows Linux Ubuntu и уже с ним получить свой gcc. Или вообще установить Linux отдельно на виртуальную машину и из под нее уже писать программы (Visual Studio Code есть и на Linux и она по умолчанию находит g++/gcc).
Если все же надо установить на Windows тогда смотрите в сторону MinGW (в комплекте содержит MSYS и g++/gcc). Добавлено Цитата Eretic @ И для меня это действительно головная боль Если хотите делать самостоятельно, то разобраться в наследовании как раз будет полезным самостоятельным занятием. |
Сообщ.
#3
,
|
|
|
Цитата macomics @ А может начать с чего по "проще". Например, установить под Windows Linux Ubuntu и уже с ним получить свой gcc. Или вообще установить Linux отдельно на виртуальную машину и из под нее уже писать программы (Visual Studio Code есть и на Linux и она по умолчанию находит g++/gcc). А вот это я бы не рекомендовал делать! Бритва Оккама однако. Если нужно разбираться с gcc, то можно и нужно это делать напрямую, а не через разборки с Линупсом. Цитата Eretic @ Собственно вопрос. Как нормально установить gcc под винду, в IDE Visual Code Studio. Просто по инету шариться - это уйму времени потеряешь, пока найдешь верный вариант. И как сделать чтобы программы (а их две, многопоточные и взаимодействующие между собой) компилировались с помощью make и cmake? Рекомендую почитать мою статью из раздела C/C++ FAQ "Его величество MSYS2". Получение GCC "из коробки". Ну и в дополнение полностью настроенную IDE OtCreator. Так что только останется разыскать инфу по настройке и подключению к VS Code компиляторов и отладчиков. |
Сообщ.
#4
,
|
|
|
В задании никакой VS Code не фигурирует. Полагаю, работодатель хочет увидеть от соискателя умение получить "Здравствуй, мир!" при помощи подручного текстового редактора и командной строки.
Цитата Majestio @ Вообще-то нужно именно под линукс и бритва просится по отношению ко всяким MSYS2 и VS. Бритва Оккама однако. Если нужно разбираться с gcc, то можно и нужно это делать напрямую, а не через разборки с Линупсом. |
Сообщ.
#5
,
|
|
|
Цитата Majestio @ А вот это я бы не рекомендовал делать! Бритва Оккама однако. И где вы это тут увидели. GNU Compiller Collection разрабатывалась как раз под Unix системы и начинать с ней работать как раз таки проще на Linux, а не на Windows. Тем более, если проект Цитата Eretic @ , тогда сам бог велел поставить Linux и проверять работоспособность на нем. И самое сложное из задания - это чтобы оно должно компилироваться cmake или make с gcc под линукс. |
Сообщ.
#6
,
|
|
|
|
Сообщ.
#7
,
|
|
|
Цитата Dushevny @ Вообще-то нужно именно под линукс Читаем внимательнее! Цитата Eretic @ оно должно компилироваться cmake или make с gcc под линукс После естественной установки MSYS2 под винду - мы получаем тестовый полигон с Linux-подобным окружением сразу. Поэтому не нужно переворачивать мое высказывание с ног на голову. Нужно чтобы компилировалось под Линь, пожалуйте. Но нигде не было сказано, что компиляция должна быть именно на живой, установленный на железо Линупс. |
Сообщ.
#8
,
|
|
|
P.S. "Самый кроссплатформенный" обмен данными между приложениями – сокеты на 127.0.0.1. Будет работать везде. Правда, виндовые сокеты чуток отличаются от берклиевых, но там несложно найти общее поле, если нужен просто обмен данными.
|
Сообщ.
#9
,
|
|
|
Цитата macomics @ как раз таки проще на Linux, а не на Windows Т.е. топикстартеру нужно сперва Линупс "выучить", а потом только "gcc"? Не согласен. |
Сообщ.
#10
,
|
|
|
Цитата Majestio @ Т.е. топикстартеру нужно сперва Линупс "выучить", а потом только "gcc"? Не согласен. Выучить линукс? Это как? Как стихотворение, наизусть выучить исходники? У Linux такой же интуитивный интерфейс как у Windows и, уже давно, куда удобнее чем на Windows. |
Сообщ.
#11
,
|
|
|
Спасибо всем ответившим!
Сразу скажу - установка линукса у меня пока невозможна, чисто по техническим причинам. Комп никак не соберу (жду комплектуху с Китая), а ноут прочно завязан на винду (есть специфические приложения, нужные по работе). Цитата Majestio @ Рекомендую почитать мою статью из раздела C/C++ FAQ "Его величество MSYS2". Спасибо, сейчас гляну. VSCode я упомянул просто как бесплатную IDE, в которой учу шарп и питон. Мне в принципе несущественно из под чего работать, могу и из блокнота. Главное чтобы makefile как-то создать для проекта. Цитата Dushevny @ Полагаю, работодатель хочет увидеть от соискателя умение получить "Здравствуй, мир!" при помощи подручного текстового редактора и командной строки. В задании сказано, что они будут компилировать под линуксом, насколько я понял. И чтобы компиляция была простым запуском make или cmake. И если в "приличных" компиляторах присутствуют IDE, генерирующие makefile, то на счет gcc я что-то не уверен, у него ведь нет своей IDE? Тогда как происходит процесс создания makefile? Цитата Qraizer @ Нет. Класс – это тип, а поток – это последовательность действий. Это совершенно разные сущности. Даже объект – экземпляр класса – это отдельно взятый комплект атрибутов, характеризующих класс, которые можно опрашивать и менять, но последовательность действий им всё равно никакой не приписывается. Можно потоком сделать какой-то метод класса, если очень хочется. Ясно. Значит проще не париться с классами и реализовать как и в винде - простой функцией. А там может и придумаю как классы прикрутить Цитата Qraizer @ Та мьютексы и семафоры и есть. Нужно только с разбегу не перепутать std::mutex с виндовыми Mutex, который std::recursive_mutex. А тот, что std::mutex, то виндовый Semaphore со счётчиком 2. Ещё вот недавно появились полноценные std::counting_semaphore и std::binary_semaphore, но я их ещё не пробовал. Спасибо. Это всё упрощает. Цитата Qraizer @ P.S. "Самый кроссплатформенный" обмен данными между приложениями – сокеты на 127.0.0.1. Будет работать везде. Отличная идея! Значит завтра поищу как совместить. На крайняк сделаю через #define (я студент, мне можно ) |
Сообщ.
#12
,
|
|
|
Цитата macomics @ У Linux такой же интуитивный интерфейс как у Windows и, уже давно, куда удобнее чем на Windows. свои - шел, пакетные менеджеры, особенности ФС и пр. пр. Все это ты предлагаешь изучить человеку, который все время просидел на винде. Лишь для того, чтобы разобраться с gcc. Не на одном GUI свет клином сошёлся же. Добавлено Цитата Eretic @ то на счет gcc я что-то не уверен, у него ведь нет своей IDE? Тогда как происходит процесс создания makefile? Касаемо QtCreator'а - там подключаются различные системы сборки, типа qmake, cmake, qbs. Вот они, в качестве промежуточного этапа, могут создавать make-файлы. На счет qmake - это 100%, остальные не пользовал, не могу утверждать. |
Сообщ.
#13
,
|
|
|
Цитата Majestio @ шел, пакетные менеджеры, особенности ФС и пр. пр. Это так и так понадобится по заданию. Цитата Majestio @ Все это ты предлагаешь изучить человеку, который все время просидел на винде, лишь для того, чтобы разобраться с gcc. Если он будет использовать glibc, тогда все это не понадобится до поры до времени. Но, если программа должна работать под linux, то без изучения всех этих особенностей не обойтись. Адаптировать код под несколько операционных систем без изучения их особенностей не получится. И для кросс-платформенного проекта придется все это освоить. В любом случае начинать осваивать gcc на linux проще чем на windows. На windows отсутствует man pages (как аналог MSDN и справки по glibc) и другие ресурсы с информацией. Её приведётся откапывать в интернете. А в те же оконные менеджеры (KDE, Gnome, Mate etc) уже встроены приложения, которые позволяют удобно искать страницы man pages даже не зная их названия, а по их содержимому. Добавлено Цитата Eretic @ а ноут прочно завязан на винду (есть специфические приложения, нужные по работе). В этом случае можно поставить виртуальную машину и на нее поставить linux. Я об этом способе написал еще в #3. Добавлено Для виртуальной машины с Linux вам достаточно: 1.5 GHz процессора (одноядерного), 2048 + 64 Мб RAM и 20 Гб на жестком диске |
Сообщ.
#14
,
|
|
|
Цитата macomics @ Если он будет использовать glibc, тогда все это не понадобится до поры до времени. Но, если программа должна работать под linux, то без изучения всех этих особенностей не обойтись. Адаптировать код под несколько операционных систем без изучения их особенностей не получится. И для кросс-платформенного проекта придется все это освоить. В любом случае начинать осваивать gcc на linux проще чем на windows. На windows отсутствует man pages (как аналог MSDN и справки по glibc) и другие ресурсы с информацией. Её приведётся откапывать в интернете. А в те же оконные менеджеры (KDE, Gnome, Mate etc) уже встроены приложения, которые позволяют удобно искать страницы man pages даже не зная их названия, а по их содержимому. Ему нужно пока лишь выполнить тестовое задание. Зачем сейчас всё усложнять? Разборки с Линуксом - это отдельная тема. Полезная? Несомненно. Но это совсем другая история... Заканчиваю - решать топикстартеру. |
Сообщ.
#15
,
|
|
|
Цитата Majestio @ Зачем сейчас всё усложнять? Затем, что по заданию она должна компилироваться на linux. И вот тут косяк, если из-за как-то не учтенной особенности linux, не выученной своевременно, программа просто не сможет откомпилироваться. Вот элементарный пример. Для взаимодействия предложили использовать socket. Но на Windows для работы с socket надо использовать WSAStartup и WSACleanup, которых нету в linux. Т.е. с виду работоспособный код для Windows под linux просто выдаст ошибку отсутствия функций. |