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

  Рет қаралды 25,033

Катерина Беклемышева

Катерина Беклемышева

3 жыл бұрын

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

Пікірлер: 72
@kurban1111
@kurban1111 5 ай бұрын
Ты золото. Просто нет слов. Понятно как ясный день!
@user-fh7yy8wx9u
@user-fh7yy8wx9u Жыл бұрын
Отличный ролик! Огромное спасибо!
@null3136
@null3136 Жыл бұрын
Спасибо за информативный ролик :)
@alexeykravtsov497
@alexeykravtsov497 3 ай бұрын
просто гениально, спасибо большое
@MrReape
@MrReape 18 күн бұрын
#include не клеит ничего сверху. Он копипастит содержимое указанного файла в ту строку, где он сам находится, например: [main.cpp]: void function a(){ return; #include "bracket.h" a(); [bracket.h]: } не выдаст никаких ошибок компиляции и все прекрасно запустится после сборки. Вместо строки #include "bracket.h" просто подставится закрывающая фигурная скобка. В результате листинг кода будет следующий: void function a(){ return; } a(); Отсюда же лезут ошибки связанные с множественными инклюдами одного и того же файла, для которых придумано #pragma once
@user-ut5oj5rc3b
@user-ut5oj5rc3b 5 ай бұрын
это то видео, которое не искал, но рад что нашёл
@MrReape
@MrReape 18 күн бұрын
Основная задача линкера - подтягивать связи энтри поинта (обычно в C++ это void main()) с другими символами (в простейшем случае - читай "функциями") проекта (проект = набор исходных файлов, из которых будет собран конечный исполняемый файл). Например: в 1.cpp (1.obj) мы задефайнили функцию, а в 2.cpp (2.obj) хранится ее тело. Собственно, линкер сопоставляет объявление и реализацию и создает уже единый исполняемый файл. Иногда это сопоставление может быть многоступенчатым (например в 2.cpp у нас стоит инклюд какой-нибудь стандартной библиотеки, которая не инклюдится непосредственно в 1.cpp), но сути это не меняет. По цепочке от объекта (.obj), где лежит точка входа(=энтри поинт=entry point) строятся зависимости ко всем используемым функциям и объектам и собираются в один конечный "монолит".
@well321321
@well321321 3 жыл бұрын
Спасибо!
@LotmineRu
@LotmineRu Ай бұрын
Прекрасное видео, спасибо :3
@micropp205
@micropp205 5 ай бұрын
Empress, ты ли это?))) 😇 Отличные ролики снимаешь.
@gentleWack
@gentleWack Жыл бұрын
Ты умничка, не останавливайся писать уроки, отлично получается!
@montroseaguilar2340
@montroseaguilar2340 Жыл бұрын
Великолепный ролик! Всё понятно и доходчиво
@amisto_ta
@amisto_ta Жыл бұрын
Спасибо!)
@11y970
@11y970 7 ай бұрын
Кайфовый ролик
@kpanat
@kpanat 4 ай бұрын
Вот поэтому надо пользоваться предкомилироваными заголовками и запихнуть туда общую часть всех инклудов чтобы каждый раз весь этот талмут не компилило.
@rubiks7196
@rubiks7196 Жыл бұрын
Круто)
@arda8226
@arda8226 3 ай бұрын
для поддержки канала 🙃🙃
@EvaVagner84
@EvaVagner84 Ай бұрын
Разные фломастеры, точно тян :з
@dimaster6437
@dimaster6437 Ай бұрын
❤❤❤
@kirillpupkov6314
@kirillpupkov6314 Жыл бұрын
👍
@fatoldhikki4837
@fatoldhikki4837 24 күн бұрын
35:36 ну как бы не только в иде по разному, компиляторы тоже не все с одинаковыми "настройками". Обычно все базовое действительно одинаково, но кто знает чем придется кому компилировать и подо что.
@kpanat
@kpanat 4 ай бұрын
Но надо иметь ввиду что все dll многопользовательские. И там надо добавлять блокировки для предотвращения коллизий. А статические это либа конкретной проги. Там никакие блокировки не нужны.Если конечно вы не запускает функции в многопоточном режиме. Тогда так же нужны...
@user-tn9pq7bv5h
@user-tn9pq7bv5h 4 ай бұрын
библиотеке до барабана на пользователей и "коллизии". блокировать нужно РЕСУРС
@kpanat
@kpanat 4 ай бұрын
Да ладно щаз модули появились в С++20 ну как в паскале или фортране...так что можно писать как в питоне import но с рещёткой спереди и ещё там что- писать. наверное указывать что импортить... Но я правда не проверял это ещё... Надо будет как-то попробовать. Что хорошо? Не будет этого огромного инклуда со всеми вариантами на все случаи жизни, а только то, что нужно...
@kpanat
@kpanat 4 ай бұрын
Можно посмотреть спрепроцессный файл(ой даже не знаю как правильно это произнести спрепроцессный или спрепроцессорный или спрепроцесированный? Гуглить надо...). Короче его лучше не смотреть тоже большой... Короче если больше 10 тыс строк то лучше не смотреть... неважно на чём...
@evgeniyst8380
@evgeniyst8380 Жыл бұрын
Здравствуйте! Можете посоветовать литературу годную по С++ для начинающих? И может знаете литературу в которой изучаются базовые принципы для всех языков программирования? Или просто хорошую литературу, не связанную с программированием? )
@amisto_ta
@amisto_ta Жыл бұрын
Базовое могу посоветовать "Практика и теория программирования" Винокурова и Ворожцова. По плюсам сложнее) Есть старые и годные Лафоре и Прата. Это прям классический ООП, там хорошо изложена идеология подхода, и по ним самостоятельно учились многие мои знакомые. Читать - очень даже стоит, но стиль изложения немного устарел, и современных стандартов там нет. Из годного и актуального - лекции Владимирова disk.yandex.ru/i/q34jB2WAtRskdw , но насчет уровня сложности (насколько новичку можно просто читать подряд) сказать не могу. Вот попробуете и расскажете)))
@linuxoidovich
@linuxoidovich 11 ай бұрын
Страуструп
@user-mp7lq3cu9c
@user-mp7lq3cu9c 6 ай бұрын
привет, код на си быстрее будет работать, или разница не слишком велика?
@LotmineRu
@LotmineRu Ай бұрын
а что ты там такого быстрого собрался делать
@user-mp7lq3cu9c
@user-mp7lq3cu9c Ай бұрын
@@LotmineRu мамку твою
@fatoldhikki4837
@fatoldhikki4837 24 күн бұрын
В целом да, быстрее. Но все зависит от того что ты там пишешь, не для всего необходима скорость плюсов часто хватает чего помедленнее.
@user-mp7lq3cu9c
@user-mp7lq3cu9c 23 күн бұрын
@@LotmineRu представь себе, я пишу софт, который не будет тормозить, то о чём все так много говорят и мечтают)
@LotmineRu
@LotmineRu 23 күн бұрын
@@user-mp7lq3cu9c так ты уже что-то написал или потом когда-нибудь напишешь?)
@user-wd4eu2gx8b
@user-wd4eu2gx8b 13 күн бұрын
Что за компилятор?
@DARKFAVEN
@DARKFAVEN 5 ай бұрын
Хороший пример как сложно рассказать о простом
@hiler844
@hiler844 Жыл бұрын
что за вуз ? хоть это база и она простая, но в вузах редко рассказывают
@amisto_ta
@amisto_ta Жыл бұрын
МФТИ, курс информатики для ФАКТ, 2 семестр)
@kirillpupkov6314
@kirillpupkov6314 Жыл бұрын
@@amisto_ta а у на с во втором семестре были паскали(
@amisto_ta
@amisto_ta Жыл бұрын
@@kirillpupkov6314 Оч сочувствую Т-Т
@Delicatamente
@Delicatamente Ай бұрын
супер! спасибо!
@sergshutk2757
@sergshutk2757 11 ай бұрын
еччочs ))) Писец... кто это всё придумывал? Почему на Паскале сделали нормально всё и без данных заморочек? Ну хоть многое стало понятно более-менее. Теперь бы ещё нормальный IDE для Linux найти.
@linuxoidovich
@linuxoidovich 11 ай бұрын
Neovim. Лучшая IDE если вы знаете как её настраивать.
@KiberDoktoR
@KiberDoktoR 6 ай бұрын
Qt Creator, как пример.
@user-hc6ll3qr3s
@user-hc6ll3qr3s Ай бұрын
Че это вдруг у Python компилятора то нет? там под капотом CPython, PyPy и.т.д его код тоже компилится в исполняемый .exe
@propilen3
@propilen3 Ай бұрын
exe != машинный код.
@user-hc6ll3qr3s
@user-hc6ll3qr3s Ай бұрын
@@propilen3 Cython и да у питона есть . pyc расширение. Вам самому нужно побольше ше в разработку углубиться
@user-hc6ll3qr3s
@user-hc6ll3qr3s Ай бұрын
@@propilen3 я и не писал машинный код в комменте, читайте внимательно
@propilen3
@propilen3 Ай бұрын
Вы все в кучу свалили. *.pyc - это байткод для виртуальной машины. Cyton != Python. Чтобы скомпилить питоновский код им, придется внести достаточно изменений. Хотя бы поработать над типизацией, без которой питон не получится транслировать в си. В обычном случае Питон2экзе - просто упаковщик. Для языков jvm такие тоже есть.
@kpanat
@kpanat 4 ай бұрын
Ну наверное ели бы на ассемблере было легко писать то нафига тогда другие языки? Писали бы на нём...А нет, это оч непросто. Хотя язык оч простой. Я бы даже сказал примитивный. Но тут как говорится? Вот на русском в алфавите 33 буквы всего оч просто. А сколько слов есть с сколько книг написали! Вот с ассемблером то же самое. Конструкций та немного а файлы огромные... я бы сказал гигантские... Поэтому предпочитают более сложные С++/С но более короткие и понятные... А ты попробуй разберись в ассемблерном коде в котором миллионы строк... простых, но оч много!!!
@MasterZiv
@MasterZiv Жыл бұрын
Ну чуть девушка местами врёт, но не критично...
@Red_Paper6495
@Red_Paper6495 8 ай бұрын
ну для остальных указали бы в чем именно. А то, как то без основательно получилось
@RgavayaGalaktika
@RgavayaGalaktika 5 ай бұрын
А где не так? Поясните где ошибка.
@rahoti5765
@rahoti5765 2 ай бұрын
я всё видео не смотрел, но ошибку услышал. Почти любой язык может быть и интерпретируемым и компилируемым, т.е. пайтон тоже может преобразовываться в объектный код
@faktor_kda
@faktor_kda 27 күн бұрын
начните с того, кто от кого пошел)
@eugenebazhin8204
@eugenebazhin8204 19 күн бұрын
Согласен)))
@alexgrabar
@alexgrabar 5 ай бұрын
Варнинги не варнинги, а ворнинки. А вообще, в русском языке есть слово: предупреждение.
@user-stw46klcw9pd
@user-stw46klcw9pd 3 ай бұрын
Атеншинги, ахтунги 😂.
@valentinskorkin7821
@valentinskorkin7821 Ай бұрын
Извините, но после варнингов смотреть дальше не смог... Подтяните инглицкий пжста
@lovxxs
@lovxxs 4 ай бұрын
Очень интересно получилось, спасибо. Если я правильно понял, то cp = copy, mv = move, rv = remove, а ls не понял. И еще, $ g++ -E - препроцессинг, $ g++ -c - объектный файл (.о), $ g++ -s - ассемблерный листинг, $ g++ 1.cpp - компиляция.
@DerMeister1985
@DerMeister1985 7 ай бұрын
Все вроде отлично, но есть же директива #pragma_once
@cyrilanisimov
@cyrilanisimov 7 ай бұрын
Она не всегда корректно работает. Вроде. Поэтому иногда предпочитают традиционный способ с ифами
@DerMeister1985
@DerMeister1985 7 ай бұрын
@@cyrilanisimov новость для меня что она не всегда корректно работает
@cyrilanisimov
@cyrilanisimov 7 ай бұрын
@@DerMeister1985 А вы почитайте, как работает эта прагма
@lovxxs
@lovxxs 4 ай бұрын
​@@cyrilanisimovона работает почти со всеми компиляторами корректно. Она не работает только с допотопными старыми компиляторами, поэтому используют ифдефы и ифндефы. Но всегда и то, и то пихают в код, чтоб наверняка.
@cyrilanisimov
@cyrilanisimov 4 ай бұрын
@@lovxxs лол) Это где пихают и то, и то?
@regroupteam7302
@regroupteam7302 Ай бұрын
Катерина! Можно ли на вас жениться?
valgrind | Ubuntu на Windows 10 | основной функционал valgrind
18:21
Катерина Беклемышева
Рет қаралды 2,5 М.
蜘蛛侠这操作也太坏了吧#蜘蛛侠#超人#超凡蜘蛛
00:47
超凡蜘蛛
Рет қаралды 25 МЛН
ты C++ РАЗРАБОТЧИК?) ага
12:04
Winderton
Рет қаралды 217 М.
ТАК ПРОГРАММИРОВАЛИ НАШИ ДЕДЫ
21:18
Honey Montana
Рет қаралды 34 М.
КАК ЧИТАТЬ И ПОНИМАТЬ С/C++ КОД?
8:21
Winderton
Рет қаралды 179 М.
Заголовочные ФАЙЛЫ в Си за 6 МИНУТ
6:13
Живая рыба
Рет қаралды 4,1 М.
Как делать классные pet-проекты
11:52
Vlad Mishustin
Рет қаралды 74 М.
Вся правда о работе в реанимации
28:29
Раскадровка
Рет қаралды 248 М.
ТРИЗ: НАУКА ИЗОБРЕТАТЬ! Альтшуллер. Фильм о ТРИЗ
20:21
Алексей Щинников
Рет қаралды 124 М.