Тёмный

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

Катерина Беклемышева
Подписаться 1,7 тыс.
Просмотров 30 тыс.
50% 1

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

Опубликовано:

 

16 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 90   
@ГородскойПосёлок
@ГородскойПосёлок 10 месяцев назад
это то видео, которое не искал, но рад что нашёл
@kurban1111
@kurban1111 10 месяцев назад
Ты золото. Просто нет слов. Понятно как ясный день!
@sjiwul
@sjiwul 15 дней назад
самое понятное видео об поэтапной сборке с++ проектов
@MrReape
@MrReape 5 месяцев назад
#include не клеит ничего сверху. Он копипастит содержимое указанного файла в ту строку, где он сам находится, например: [main.cpp]: void function a(){ return; #include "bracket.h" a(); [bracket.h]: } не выдаст никаких ошибок компиляции и все прекрасно запустится после сборки. Вместо строки #include "bracket.h" просто подставится закрывающая фигурная скобка. В результате листинг кода будет следующий: void function a(){ return; } a(); Отсюда же лезут ошибки связанные с множественными инклюдами одного и того же файла, для которых придумано #pragma once
@user-wj5zw6du8x
@user-wj5zw6du8x 2 месяца назад
она это и имела ввиду
@montroseaguilar2340
@montroseaguilar2340 Год назад
Великолепный ролик! Всё понятно и доходчиво
@amisto_ta
@amisto_ta Год назад
Спасибо!)
@АртемСверканов
@АртемСверканов 2 месяца назад
Спасибо! наконец понял зачем существуют заголовочные файлы
@kpanat
@kpanat 8 месяцев назад
Вот поэтому надо пользоваться предкомилироваными заголовками и запихнуть туда общую часть всех инклудов чтобы каждый раз весь этот талмут не компилило.
@gentleWack
@gentleWack Год назад
Ты умничка, не останавливайся писать уроки, отлично получается!
@MrReape
@MrReape 5 месяцев назад
Основная задача линкера - подтягивать связи энтри поинта (обычно в C++ это void main()) с другими символами (в простейшем случае - читай "функциями") проекта (проект = набор исходных файлов, из которых будет собран конечный исполняемый файл). Например: в 1.cpp (1.obj) мы задефайнили функцию, а в 2.cpp (2.obj) хранится ее тело. Собственно, линкер сопоставляет объявление и реализацию и создает уже единый исполняемый файл. Иногда это сопоставление может быть многоступенчатым (например в 2.cpp у нас стоит инклюд какой-нибудь стандартной библиотеки, которая не инклюдится непосредственно в 1.cpp), но сути это не меняет. По цепочке от объекта (.obj), где лежит точка входа(=энтри поинт=entry point) строятся зависимости ко всем используемым функциям и объектам и собираются в один конечный "монолит".
@micropp205
@micropp205 10 месяцев назад
Empress, ты ли это?))) 😇 Отличные ролики снимаешь.
@НиколайБарабанов-э7ф
Отличный ролик! Огромное спасибо!
@alexeykravtsov497
@alexeykravtsov497 8 месяцев назад
просто гениально, спасибо большое
@null3136
@null3136 Год назад
Спасибо за информативный ролик :)
@bulba1995
@bulba1995 2 месяца назад
Мое почтение , отличное видео !)
@user-hd5yy6ds3x
@user-hd5yy6ds3x Месяц назад
спасибо за крутой разбор
@ИльнурНабиуллин-о5н
Спасибо
@well321321
@well321321 3 года назад
Спасибо!
@fatoldhikki4837
@fatoldhikki4837 5 месяцев назад
35:36 ну как бы не только в иде по разному, компиляторы тоже не все с одинаковыми "настройками". Обычно все базовое действительно одинаково, но кто знает чем придется кому компилировать и подо что.
@in9597
@in9597 2 месяца назад
Слушать приятно
@LotmineRu
@LotmineRu 6 месяцев назад
Прекрасное видео, спасибо :3
@arda8226
@arda8226 7 месяцев назад
для поддержки канала 🙃🙃
@leonidgarnovskey9883
@leonidgarnovskey9883 Месяц назад
Супер 👍
@kpanat
@kpanat 8 месяцев назад
Но надо иметь ввиду что все dll многопользовательские. И там надо добавлять блокировки для предотвращения коллизий. А статические это либа конкретной проги. Там никакие блокировки не нужны.Если конечно вы не запускает функции в многопоточном режиме. Тогда так же нужны...
@user-tn9pq7bv5h
@user-tn9pq7bv5h 8 месяцев назад
библиотеке до барабана на пользователей и "коллизии". блокировать нужно РЕСУРС
@TestTest-fi2ok
@TestTest-fi2ok Месяц назад
Интересное видео 👍
@EvaVagner84
@EvaVagner84 6 месяцев назад
Разные фломастеры, точно тян :з
@MrGeralt67
@MrGeralt67 2 месяца назад
Один этап сборки пропущен. Процесс инстанционирования шаблонов не является препроцессингом, но тем не менее происходит до этапа компиляции. В частности, если есть выбор между специализированными версиями шаблона функции и общей версией - он должен произойти до этапа компиляции, пока он не сделан компилятор еще не знает, что ему компилировать.
@КириллЧе-я5ы
@КириллЧе-я5ы Месяц назад
Согласен, шаблоны генерируются до препроцессинга вроде как…
@lovxxs
@lovxxs 9 месяцев назад
Очень интересно получилось, спасибо. Если я правильно понял, то cp = copy, mv = move, rv = remove, а ls не понял. И еще, $ g++ -E - препроцессинг, $ g++ -c - объектный файл (.о), $ g++ -s - ассемблерный листинг, $ g++ 1.cpp - компиляция.
@11y970
@11y970 Год назад
Кайфовый ролик
@ИльдарБулатов-т4х
@ИльдарБулатов-т4х 3 месяца назад
Там у компоновщика (линкер) присутствует ABI, чтобы склмпоновать) слинковать, должен быть бинарный интерфейс
@dimaster6437
@dimaster6437 6 месяцев назад
❤❤❤
@kpanat
@kpanat 8 месяцев назад
Да ладно щаз модули появились в С++20 ну как в паскале или фортране...так что можно писать как в питоне import но с рещёткой спереди и ещё там что- писать. наверное указывать что импортить... Но я правда не проверял это ещё... Надо будет как-то попробовать. Что хорошо? Не будет этого огромного инклуда со всеми вариантами на все случаи жизни, а только то, что нужно...
@rubiks7196
@rubiks7196 2 года назад
Круто)
@kpanat
@kpanat 8 месяцев назад
Можно посмотреть спрепроцессный файл(ой даже не знаю как правильно это произнести спрепроцессный или спрепроцессорный или спрепроцесированный? Гуглить надо...). Короче его лучше не смотреть тоже большой... Короче если больше 10 тыс строк то лучше не смотреть... неважно на чём...
@kirillpupkov6314
@kirillpupkov6314 Год назад
👍
@DARKFAVEN
@DARKFAVEN 10 месяцев назад
Хороший пример как сложно рассказать о простом
@bludrunn3r560
@bludrunn3r560 5 дней назад
С- Тс- режут слух, без поп-фильтра никак нельзя
@evgeniyst8380
@evgeniyst8380 Год назад
Здравствуйте! Можете посоветовать литературу годную по С++ для начинающих? И может знаете литературу в которой изучаются базовые принципы для всех языков программирования? Или просто хорошую литературу, не связанную с программированием? )
@amisto_ta
@amisto_ta Год назад
Базовое могу посоветовать "Практика и теория программирования" Винокурова и Ворожцова. По плюсам сложнее) Есть старые и годные Лафоре и Прата. Это прям классический ООП, там хорошо изложена идеология подхода, и по ним самостоятельно учились многие мои знакомые. Читать - очень даже стоит, но стиль изложения немного устарел, и современных стандартов там нет. Из годного и актуального - лекции Владимирова disk.yandex.ru/i/q34jB2WAtRskdw , но насчет уровня сложности (насколько новичку можно просто читать подряд) сказать не могу. Вот попробуете и расскажете)))
@linuxoidovich
@linuxoidovich Год назад
Страуструп
@Nop_90h
@Nop_90h 2 месяца назад
хмм я чот не понял про .text+0x21, разве +0х21 это не байтовое смещение относительно сегмента text, про какие строки речь ? XD
@kpanat
@kpanat 8 месяцев назад
Ну наверное ели бы на ассемблере было легко писать то нафига тогда другие языки? Писали бы на нём...А нет, это оч непросто. Хотя язык оч простой. Я бы даже сказал примитивный. Но тут как говорится? Вот на русском в алфавите 33 буквы всего оч просто. А сколько слов есть с сколько книг написали! Вот с ассемблером то же самое. Конструкций та немного а файлы огромные... я бы сказал гигантские... Поэтому предпочитают более сложные С++/С но более короткие и понятные... А ты попробуй разберись в ассемблерном коде в котором миллионы строк... простых, но оч много!!!
@Сам-ю1ч
@Сам-ю1ч 5 месяцев назад
Что за компилятор?
@user-hc6ll3qr3s
@user-hc6ll3qr3s 5 месяцев назад
Че это вдруг у Python компилятора то нет? там под капотом CPython, PyPy и.т.д его код тоже компилится в исполняемый .exe
@propilen3
@propilen3 5 месяцев назад
exe != машинный код.
@user-hc6ll3qr3s
@user-hc6ll3qr3s 5 месяцев назад
@@propilen3 Cython и да у питона есть . pyc расширение. Вам самому нужно побольше ше в разработку углубиться
@user-hc6ll3qr3s
@user-hc6ll3qr3s 5 месяцев назад
@@propilen3 я и не писал машинный код в комменте, читайте внимательно
@propilen3
@propilen3 5 месяцев назад
Вы все в кучу свалили. *.pyc - это байткод для виртуальной машины. Cyton != Python. Чтобы скомпилить питоновский код им, придется внести достаточно изменений. Хотя бы поработать над типизацией, без которой питон не получится транслировать в си. В обычном случае Питон2экзе - просто упаковщик. Для языков jvm такие тоже есть.
@sergshutk2757
@sergshutk2757 Год назад
еччочs ))) Писец... кто это всё придумывал? Почему на Паскале сделали нормально всё и без данных заморочек? Ну хоть многое стало понятно более-менее. Теперь бы ещё нормальный IDE для Linux найти.
@linuxoidovich
@linuxoidovich Год назад
Neovim. Лучшая IDE если вы знаете как её настраивать.
@KiberDoktoR
@KiberDoktoR 10 месяцев назад
Qt Creator, как пример.
@user-mp7lq3cu9c
@user-mp7lq3cu9c 11 месяцев назад
привет, код на си быстрее будет работать, или разница не слишком велика?
@LotmineRu
@LotmineRu 6 месяцев назад
а что ты там такого быстрого собрался делать
@user-mp7lq3cu9c
@user-mp7lq3cu9c 6 месяцев назад
@@LotmineRu мамку твою
@fatoldhikki4837
@fatoldhikki4837 5 месяцев назад
В целом да, быстрее. Но все зависит от того что ты там пишешь, не для всего необходима скорость плюсов часто хватает чего помедленнее.
@user-mp7lq3cu9c
@user-mp7lq3cu9c 5 месяцев назад
@@LotmineRu представь себе, я пишу софт, который не будет тормозить, то о чём все так много говорят и мечтают)
@LotmineRu
@LotmineRu 5 месяцев назад
@@user-mp7lq3cu9c так ты уже что-то написал или потом когда-нибудь напишешь?)
@hiler844
@hiler844 Год назад
что за вуз ? хоть это база и она простая, но в вузах редко рассказывают
@amisto_ta
@amisto_ta Год назад
МФТИ, курс информатики для ФАКТ, 2 семестр)
@kirillpupkov6314
@kirillpupkov6314 Год назад
@@amisto_ta а у на с во втором семестре были паскали(
@amisto_ta
@amisto_ta Год назад
@@kirillpupkov6314 Оч сочувствую Т-Т
@MasterZiv
@MasterZiv Год назад
Ну чуть девушка местами врёт, но не критично...
@RgavayaGalaktika
@RgavayaGalaktika 9 месяцев назад
А где не так? Поясните где ошибка.
@rahoti5765
@rahoti5765 7 месяцев назад
я всё видео не смотрел, но ошибку услышал. Почти любой язык может быть и интерпретируемым и компилируемым, т.е. пайтон тоже может преобразовываться в объектный код
@faktor_kda
@faktor_kda 5 месяцев назад
начните с того, кто от кого пошел)
@eugenebazhin8204
@eugenebazhin8204 5 месяцев назад
Согласен)))
@ARTEMvorkhlik
@ARTEMvorkhlik 5 месяцев назад
Девушки все врут 😊
@alexgrabar
@alexgrabar 9 месяцев назад
Варнинги не варнинги, а ворнинки. А вообще, в русском языке есть слово: предупреждение.
@user-ztghR65Dtsk
@user-ztghR65Dtsk 8 месяцев назад
Атеншинги, ахтунги 😂.
@prayer4675
@prayer4675 2 месяца назад
Послушал первые десять минут и выключил. Рассказ о сборке проекта чисто для девочек - в стиле, как испечь вкусный торт.
@МорготБауглир-и1е
@МорготБауглир-и1е Месяц назад
Просто признайся, что ниасилел
@prayer4675
@prayer4675 Месяц назад
@@МорготБауглир-и1е Просто стало скучно. Ну а если ты сам не осилил, то не следует проецировать это на других.
@ValentineWS
@ValentineWS 6 месяцев назад
Извините, но после варнингов смотреть дальше не смог... Подтяните инглицкий пжста
@Delicatamente
@Delicatamente 5 месяцев назад
супер! спасибо!
@DerMeister1985
@DerMeister1985 Год назад
Все вроде отлично, но есть же директива #pragma_once
@cyrilanisimov
@cyrilanisimov Год назад
Она не всегда корректно работает. Вроде. Поэтому иногда предпочитают традиционный способ с ифами
@DerMeister1985
@DerMeister1985 Год назад
@@cyrilanisimov новость для меня что она не всегда корректно работает
@cyrilanisimov
@cyrilanisimov Год назад
@@DerMeister1985 А вы почитайте, как работает эта прагма
@lovxxs
@lovxxs 9 месяцев назад
​@@cyrilanisimovона работает почти со всеми компиляторами корректно. Она не работает только с допотопными старыми компиляторами, поэтому используют ифдефы и ифндефы. Но всегда и то, и то пихают в код, чтоб наверняка.
@cyrilanisimov
@cyrilanisimov 9 месяцев назад
@@lovxxs лол) Это где пихают и то, и то?
@regroupteam7302
@regroupteam7302 6 месяцев назад
Катерина! Можно ли на вас жениться?
Далее
Школьник угомонил бандита!
01:00
ты C++ РАЗРАБОТЧИК?) ага
12:04
Просмотров 238 тыс.
Собеседование Middle C++
52:34
Просмотров 22 тыс.
Premature Optimization
12:39
Просмотров 806 тыс.
Demystifying the C++ Compiler!
12:52
Просмотров 12 тыс.
Собеседование Junior C++
45:32
Просмотров 114 тыс.