Сборка проекта С++

2021 ж. 19 Ақп.
25 022 Рет қаралды

Эта тема всплывает неизбежно и неоднократно даже при работе над небольшими проектами. Но если держать в голове достаточно небольшую и структурированную схему, отлаживать некоторые моменты становится на порядок легче.
Этапы сборки - препроцессинг, компиляция, линковка. Схема сборки. Хедеры (заголовочные файлы .h), статические библиотеки (.lib/.a), динамические библиотеки (.dll/.so). Сборка в консоли, основные флаги g++. Порядок сборки, характерные ошибки и сценарии использования.

Пікірлер
  • Ты золото. Просто нет слов. Понятно как ясный день!

    @kurban1111@kurban11115 ай бұрын
  • Отличный ролик! Огромное спасибо!

    @user-fh7yy8wx9u@user-fh7yy8wx9u Жыл бұрын
  • Спасибо за информативный ролик :)

    @null3136@null3136 Жыл бұрын
  • #include не клеит ничего сверху. Он копипастит содержимое указанного файла в ту строку, где он сам находится, например: [main.cpp]: void function a(){ return; #include "bracket.h" a(); [bracket.h]: } не выдаст никаких ошибок компиляции и все прекрасно запустится после сборки. Вместо строки #include "bracket.h" просто подставится закрывающая фигурная скобка. В результате листинг кода будет следующий: void function a(){ return; } a(); Отсюда же лезут ошибки связанные с множественными инклюдами одного и того же файла, для которых придумано #pragma once

    @MrReape@MrReape18 күн бұрын
  • просто гениально, спасибо большое

    @alexeykravtsov497@alexeykravtsov4973 ай бұрын
  • это то видео, которое не искал, но рад что нашёл

    @user-ut5oj5rc3b@user-ut5oj5rc3b5 ай бұрын
  • Основная задача линкера - подтягивать связи энтри поинта (обычно в C++ это void main()) с другими символами (в простейшем случае - читай "функциями") проекта (проект = набор исходных файлов, из которых будет собран конечный исполняемый файл). Например: в 1.cpp (1.obj) мы задефайнили функцию, а в 2.cpp (2.obj) хранится ее тело. Собственно, линкер сопоставляет объявление и реализацию и создает уже единый исполняемый файл. Иногда это сопоставление может быть многоступенчатым (например в 2.cpp у нас стоит инклюд какой-нибудь стандартной библиотеки, которая не инклюдится непосредственно в 1.cpp), но сути это не меняет. По цепочке от объекта (.obj), где лежит точка входа(=энтри поинт=entry point) строятся зависимости ко всем используемым функциям и объектам и собираются в один конечный "монолит".

    @MrReape@MrReape18 күн бұрын
  • Спасибо!

    @well321321@well3213213 жыл бұрын
  • Прекрасное видео, спасибо :3

    @LotmineRu@LotmineRuАй бұрын
  • Empress, ты ли это?))) 😇 Отличные ролики снимаешь.

    @micropp205@micropp2055 ай бұрын
  • Ты умничка, не останавливайся писать уроки, отлично получается!

    @gentleWack@gentleWack Жыл бұрын
  • Великолепный ролик! Всё понятно и доходчиво

    @montroseaguilar2340@montroseaguilar2340 Жыл бұрын
    • Спасибо!)

      @amisto_ta@amisto_ta Жыл бұрын
  • Кайфовый ролик

    @11y970@11y9707 ай бұрын
  • Вот поэтому надо пользоваться предкомилироваными заголовками и запихнуть туда общую часть всех инклудов чтобы каждый раз весь этот талмут не компилило.

    @kpanat@kpanat4 ай бұрын
  • Круто)

    @rubiks7196@rubiks7196 Жыл бұрын
  • для поддержки канала 🙃🙃

    @arda8226@arda82263 ай бұрын
  • Разные фломастеры, точно тян :з

    @EvaVagner84@EvaVagner84Ай бұрын
  • ❤❤❤

    @dimaster6437@dimaster6437Ай бұрын
  • 👍

    @kirillpupkov6314@kirillpupkov6314 Жыл бұрын
  • 35:36 ну как бы не только в иде по разному, компиляторы тоже не все с одинаковыми "настройками". Обычно все базовое действительно одинаково, но кто знает чем придется кому компилировать и подо что.

    @fatoldhikki4837@fatoldhikki483723 күн бұрын
  • Но надо иметь ввиду что все dll многопользовательские. И там надо добавлять блокировки для предотвращения коллизий. А статические это либа конкретной проги. Там никакие блокировки не нужны.Если конечно вы не запускает функции в многопоточном режиме. Тогда так же нужны...

    @kpanat@kpanat4 ай бұрын
    • библиотеке до барабана на пользователей и "коллизии". блокировать нужно РЕСУРС

      @user-tn9pq7bv5h@user-tn9pq7bv5h4 ай бұрын
  • Да ладно щаз модули появились в С++20 ну как в паскале или фортране...так что можно писать как в питоне import но с рещёткой спереди и ещё там что- писать. наверное указывать что импортить... Но я правда не проверял это ещё... Надо будет как-то попробовать. Что хорошо? Не будет этого огромного инклуда со всеми вариантами на все случаи жизни, а только то, что нужно...

    @kpanat@kpanat4 ай бұрын
  • Можно посмотреть спрепроцессный файл(ой даже не знаю как правильно это произнести спрепроцессный или спрепроцессорный или спрепроцесированный? Гуглить надо...). Короче его лучше не смотреть тоже большой... Короче если больше 10 тыс строк то лучше не смотреть... неважно на чём...

    @kpanat@kpanat4 ай бұрын
  • Здравствуйте! Можете посоветовать литературу годную по С++ для начинающих? И может знаете литературу в которой изучаются базовые принципы для всех языков программирования? Или просто хорошую литературу, не связанную с программированием? )

    @evgeniyst8380@evgeniyst8380 Жыл бұрын
    • Базовое могу посоветовать "Практика и теория программирования" Винокурова и Ворожцова. По плюсам сложнее) Есть старые и годные Лафоре и Прата. Это прям классический ООП, там хорошо изложена идеология подхода, и по ним самостоятельно учились многие мои знакомые. Читать - очень даже стоит, но стиль изложения немного устарел, и современных стандартов там нет. Из годного и актуального - лекции Владимирова disk.yandex.ru/i/q34jB2WAtRskdw , но насчет уровня сложности (насколько новичку можно просто читать подряд) сказать не могу. Вот попробуете и расскажете)))

      @amisto_ta@amisto_ta Жыл бұрын
    • Страуструп

      @linuxoidovich@linuxoidovich11 ай бұрын
  • привет, код на си быстрее будет работать, или разница не слишком велика?

    @user-mp7lq3cu9c@user-mp7lq3cu9c6 ай бұрын
    • а что ты там такого быстрого собрался делать

      @LotmineRu@LotmineRuАй бұрын
    • @@LotmineRu мамку твою

      @user-mp7lq3cu9c@user-mp7lq3cu9cАй бұрын
    • В целом да, быстрее. Но все зависит от того что ты там пишешь, не для всего необходима скорость плюсов часто хватает чего помедленнее.

      @fatoldhikki4837@fatoldhikki483723 күн бұрын
    • @@LotmineRu представь себе, я пишу софт, который не будет тормозить, то о чём все так много говорят и мечтают)

      @user-mp7lq3cu9c@user-mp7lq3cu9c23 күн бұрын
    • @@user-mp7lq3cu9c так ты уже что-то написал или потом когда-нибудь напишешь?)

      @LotmineRu@LotmineRu23 күн бұрын
  • Что за компилятор?

    @user-wd4eu2gx8b@user-wd4eu2gx8b13 күн бұрын
  • Хороший пример как сложно рассказать о простом

    @DARKFAVEN@DARKFAVEN5 ай бұрын
  • что за вуз ? хоть это база и она простая, но в вузах редко рассказывают

    @hiler844@hiler844 Жыл бұрын
    • МФТИ, курс информатики для ФАКТ, 2 семестр)

      @amisto_ta@amisto_ta Жыл бұрын
    • @@amisto_ta а у на с во втором семестре были паскали(

      @kirillpupkov6314@kirillpupkov6314 Жыл бұрын
    • @@kirillpupkov6314 Оч сочувствую Т-Т

      @amisto_ta@amisto_ta Жыл бұрын
  • супер! спасибо!

    @Delicatamente@DelicatamenteАй бұрын
  • еччочs ))) Писец... кто это всё придумывал? Почему на Паскале сделали нормально всё и без данных заморочек? Ну хоть многое стало понятно более-менее. Теперь бы ещё нормальный IDE для Linux найти.

    @sergshutk2757@sergshutk275711 ай бұрын
    • Neovim. Лучшая IDE если вы знаете как её настраивать.

      @linuxoidovich@linuxoidovich11 ай бұрын
    • Qt Creator, как пример.

      @KiberDoktoR@KiberDoktoR6 ай бұрын
  • Че это вдруг у Python компилятора то нет? там под капотом CPython, PyPy и.т.д его код тоже компилится в исполняемый .exe

    @user-hc6ll3qr3s@user-hc6ll3qr3sАй бұрын
    • exe != машинный код.

      @propilen3@propilen3Ай бұрын
    • @@propilen3 Cython и да у питона есть . pyc расширение. Вам самому нужно побольше ше в разработку углубиться

      @user-hc6ll3qr3s@user-hc6ll3qr3sАй бұрын
    • @@propilen3 я и не писал машинный код в комменте, читайте внимательно

      @user-hc6ll3qr3s@user-hc6ll3qr3sАй бұрын
    • Вы все в кучу свалили. *.pyc - это байткод для виртуальной машины. Cyton != Python. Чтобы скомпилить питоновский код им, придется внести достаточно изменений. Хотя бы поработать над типизацией, без которой питон не получится транслировать в си. В обычном случае Питон2экзе - просто упаковщик. Для языков jvm такие тоже есть.

      @propilen3@propilen3Ай бұрын
  • Ну наверное ели бы на ассемблере было легко писать то нафига тогда другие языки? Писали бы на нём...А нет, это оч непросто. Хотя язык оч простой. Я бы даже сказал примитивный. Но тут как говорится? Вот на русском в алфавите 33 буквы всего оч просто. А сколько слов есть с сколько книг написали! Вот с ассемблером то же самое. Конструкций та немного а файлы огромные... я бы сказал гигантские... Поэтому предпочитают более сложные С++/С но более короткие и понятные... А ты попробуй разберись в ассемблерном коде в котором миллионы строк... простых, но оч много!!!

    @kpanat@kpanat4 ай бұрын
  • Ну чуть девушка местами врёт, но не критично...

    @MasterZiv@MasterZiv Жыл бұрын
    • ну для остальных указали бы в чем именно. А то, как то без основательно получилось

      @Red_Paper6495@Red_Paper64958 ай бұрын
    • А где не так? Поясните где ошибка.

      @RgavayaGalaktika@RgavayaGalaktika5 ай бұрын
    • я всё видео не смотрел, но ошибку услышал. Почти любой язык может быть и интерпретируемым и компилируемым, т.е. пайтон тоже может преобразовываться в объектный код

      @rahoti5765@rahoti57652 ай бұрын
    • начните с того, кто от кого пошел)

      @faktor_kda@faktor_kda27 күн бұрын
    • Согласен)))

      @eugenebazhin8204@eugenebazhin820419 күн бұрын
  • Варнинги не варнинги, а ворнинки. А вообще, в русском языке есть слово: предупреждение.

    @alexgrabar@alexgrabar5 ай бұрын
    • Атеншинги, ахтунги 😂.

      @user-stw46klcw9pd@user-stw46klcw9pd3 ай бұрын
  • Извините, но после варнингов смотреть дальше не смог... Подтяните инглицкий пжста

    @valentinskorkin7821@valentinskorkin7821Ай бұрын
  • Очень интересно получилось, спасибо. Если я правильно понял, то cp = copy, mv = move, rv = remove, а ls не понял. И еще, $ g++ -E - препроцессинг, $ g++ -c - объектный файл (.о), $ g++ -s - ассемблерный листинг, $ g++ 1.cpp - компиляция.

    @lovxxs@lovxxs4 ай бұрын
  • Все вроде отлично, но есть же директива #pragma_once

    @DerMeister1985@DerMeister19857 ай бұрын
    • Она не всегда корректно работает. Вроде. Поэтому иногда предпочитают традиционный способ с ифами

      @cyrilanisimov@cyrilanisimov7 ай бұрын
    • @@cyrilanisimov новость для меня что она не всегда корректно работает

      @DerMeister1985@DerMeister19857 ай бұрын
    • @@DerMeister1985 А вы почитайте, как работает эта прагма

      @cyrilanisimov@cyrilanisimov7 ай бұрын
    • ​@@cyrilanisimovона работает почти со всеми компиляторами корректно. Она не работает только с допотопными старыми компиляторами, поэтому используют ифдефы и ифндефы. Но всегда и то, и то пихают в код, чтоб наверняка.

      @lovxxs@lovxxs4 ай бұрын
    • @@lovxxs лол) Это где пихают и то, и то?

      @cyrilanisimov@cyrilanisimov4 ай бұрын
  • Катерина! Можно ли на вас жениться?

    @regroupteam7302@regroupteam7302Ай бұрын
KZhead