На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (4) [1] 2 3 ... Последняя » все  ( Перейти к последнему сообщению )  
> gcc - установка и настройка
    Всем привет!
    У меня тут подработка наклюнулась, в одну контору на C++.
    Проблема даже не в том, что именно ++ я не знаю (там стажировка на лето, ещё 10 раз выучу). Проблема в том, что нужно сразу сдать тестовое задание. И самое сложное из задания - это чтобы оно должно компилироваться cmake или make с gcc под линукс.
    До сего дня я жил в уверенности, что за мкадом жизни нет есть только два компилятора Visual Studio и Watcom. Которыми и пользовался время от времени. А тут сразу gcc, да еще под линукс, который я и в глаза не видел.

    Собственно вопрос.
    Как нормально установить gcc под винду, в IDE Visual Code Studio. Просто по инету шариться - это уйму времени потеряешь, пока найдешь верный вариант. И как сделать чтобы программы (а их две, многопоточные и взаимодействующие между собой) компилировались с помощью make и cmake?

    Задание я и сам сделаю, но остаются неясные моменты (я конечно их могу загуглить, но буду очень признателен за сэкономленное время):
    1) потоки в C++ создаются через std::thread?
    2) Потоком можно сделать класс? Точнее экземпляр класса? Есть какие то тонкости?
    3) какие стандартные средства есть для синхронизации доступа к данным между потоками? Просто я в винде всю жизнь использовал мьютексы и семафоры, а вот что есть в ++ даже не представляю.
    4) основная проблема: как передать данные из одной программы в другую, чтобы работало и на винде и на линуксе?

    Я не пишу что за задание, поскольку хочу сделать сам. Но если кому интересно, буду признателен за помощь в описании классов. Просто на мой взгляд задание настолько простое, что ООП там совершенно не нужно. Но в задании чётко сказано:
    Цитата
    Не обязательно все размещать в одном классе. Может быть разработана иерархия классов. Чем более функционален интерфейс класса, тем лучше.
    И для меня это действительно головная боль :)
      А может начать с чего по "проще". Например, установить под Windows Linux Ubuntu и уже с ним получить свой gcc. Или вообще установить Linux отдельно на виртуальную машину и из под нее уже писать программы (Visual Studio Code есть и на Linux и она по умолчанию находит g++/gcc).

      Если все же надо установить на Windows тогда смотрите в сторону MinGW (в комплекте содержит MSYS и g++/gcc).

      Добавлено
      Цитата Eretic @
      И для меня это действительно головная боль

      Если хотите делать самостоятельно, то разобраться в наследовании как раз будет полезным самостоятельным занятием.
        Цитата 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 компиляторов и отладчиков.
          В задании никакой VS Code не фигурирует. Полагаю, работодатель хочет увидеть от соискателя умение получить "Здравствуй, мир!" при помощи подручного текстового редактора и командной строки.
          Цитата Majestio @
          Бритва Оккама однако. Если нужно разбираться с gcc, то можно и нужно это делать напрямую, а не через разборки с Линупсом.
          Вообще-то нужно именно под линукс и бритва просится по отношению ко всяким MSYS2 и VS.
            Цитата Majestio @
            А вот это я бы не рекомендовал делать! Бритва Оккама однако.

            И где вы это тут увидели. GNU Compiller Collection разрабатывалась как раз под Unix системы и начинать с ней работать как раз таки проще на Linux, а не на Windows. Тем более, если проект
            Цитата Eretic @
            И самое сложное из задания - это чтобы оно должно компилироваться cmake или make с gcc под линукс.
            , тогда сам бог велел поставить Linux и проверять работоспособность на нем.
              1. Да.
              2. Нет. Класс – это тип, а поток – это последовательность действий. Это совершенно разные сущности. Даже объект – экземпляр класса – это отдельно взятый комплект атрибутов, характеризующих класс, которые можно опрашивать и менять, но последовательность действий им всё равно никакой не приписывается. Можно потоком сделать какой-то метод класса, если очень хочется.
              3. Та мьютексы и семафоры и есть. Нужно только с разбегу не перепутать std::mutex с виндовыми Mutex, который std::recursive_mutex. А тот, что std::mutex, то виндовый Semaphore со счётчиком 2. Ещё вот недавно появились полноценные std::counting_semaphore и std::binary_semaphore, но я их ещё не пробовал.
              4. Тут стандартного решения нет. Стандарт не описывает взаимодействие программных комплексов, он описывает конкретную программу.
              Сообщение отредактировано: Qraizer -
                Цитата Dushevny @
                Вообще-то нужно именно под линукс

                Читаем внимательнее!
                Цитата Eretic @
                оно должно компилироваться cmake или make с gcc под линукс

                После естественной установки MSYS2 под винду - мы получаем тестовый полигон с Linux-подобным окружением сразу. Поэтому не нужно переворачивать мое высказывание с ног на голову. Нужно чтобы компилировалось под Линь, пожалуйте. Но нигде не было сказано, что компиляция должна быть именно на живой, установленный на железо Линупс.
                  P.S. "Самый кроссплатформенный" обмен данными между приложениями – сокеты на 127.0.0.1. Будет работать везде. Правда, виндовые сокеты чуток отличаются от берклиевых, но там несложно найти общее поле, если нужен просто обмен данными.
                  Сообщение отредактировано: Qraizer -
                    Цитата macomics @
                    как раз таки проще на Linux, а не на Windows

                    Т.е. топикстартеру нужно сперва Линупс "выучить", а потом только "gcc"? Не согласен.
                      Цитата Majestio @
                      Т.е. топикстартеру нужно сперва Линупс "выучить", а потом только "gcc"? Не согласен.

                      Выучить линукс? Это как? Как стихотворение, наизусть выучить исходники? У Linux такой же интуитивный интерфейс как у Windows и, уже давно, куда удобнее чем на Windows.
                        Спасибо всем ответившим!
                        Сразу скажу - установка линукса у меня пока невозможна, чисто по техническим причинам. Комп никак не соберу (жду комплектуху с Китая), а ноут прочно завязан на винду (есть специфические приложения, нужные по работе).

                        Цитата 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 (я студент, мне можно :) )
                          Цитата macomics @
                          У Linux такой же интуитивный интерфейс как у Windows и, уже давно, куда удобнее чем на Windows.

                          :facepalm: свои - шел, пакетные менеджеры, особенности ФС и пр. пр. Все это ты предлагаешь изучить человеку, который все время просидел на винде. Лишь для того, чтобы разобраться с gcc. Не на одном GUI свет клином сошёлся же.

                          Добавлено
                          Цитата Eretic @
                          то на счет gcc я что-то не уверен, у него ведь нет своей IDE? Тогда как происходит процесс создания makefile?

                          Касаемо QtCreator'а - там подключаются различные системы сборки, типа qmake, cmake, qbs. Вот они, в качестве промежуточного этапа, могут создавать make-файлы. На счет qmake - это 100%, остальные не пользовал, не могу утверждать.
                            Цитата 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 Гб на жестком диске
                              Цитата macomics @
                              Если он будет использовать glibc, тогда все это не понадобится до поры до времени. Но, если программа должна работать под linux, то без изучения всех этих особенностей не обойтись. Адаптировать код под несколько операционных систем без изучения их особенностей не получится. И для кросс-платформенного проекта придется все это освоить.

                              В любом случае начинать осваивать gcc на linux проще чем на windows. На windows отсутствует man pages (как аналог MSDN и справки по glibc) и другие ресурсы с информацией. Её приведётся откапывать в интернете. А в те же оконные менеджеры (KDE, Gnome, Mate etc) уже встроены приложения, которые позволяют удобно искать страницы man pages даже не зная их названия, а по их содержимому.

                              Ему нужно пока лишь выполнить тестовое задание. Зачем сейчас всё усложнять? Разборки с Линуксом - это отдельная тема. Полезная? Несомненно. Но это совсем другая история... Заканчиваю - решать топикстартеру.
                                Цитата Majestio @
                                Зачем сейчас всё усложнять?

                                Затем, что по заданию она должна компилироваться на linux. И вот тут косяк, если из-за как-то не учтенной особенности linux, не выученной своевременно, программа просто не сможет откомпилироваться.

                                Вот элементарный пример. Для взаимодействия предложили использовать socket. Но на Windows для работы с socket надо использовать WSAStartup и WSACleanup, которых нету в linux. Т.е. с виду работоспособный код для Windows под linux просто выдаст ошибку отсутствия функций.
                                Сообщение отредактировано: macomics -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0508 ]   [ 18 queries used ]   [ Generated: 27.04.24, 10:45 GMT ]