LD GCC линковка библиотек в деталях
ฝัง
- เผยแพร่เมื่อ 5 ก.ย. 2024
- #soer #itubeteam
Основной канал для общения и публикации новых видео - Телегарм - t.me/softwaree...
Спонсорство - donate.s0er.ru
Сайт платным контентом - soer.pro
Зеркало для видео Дзен Видео - zen.yandex.ru/...
GitHub - github.com/soe...
Чат для программистов - / discord
Группа ВК - codeart...
заслуженный лайк проставлен, отличное и полезное видео
ну наконец-то, хоть кто то это показал. а сможете снять серию роликов, c/c++ для начинающих и не только. из серии "поиск и устранение ошибок кода". т.е. отсутствие каких ключей вызвало эту ошибку, как определить что за компилятор был у того у кого мы одолжили (слямзили) код. и почему все скомпилировалось, но не работает (причины переполнения, ошибка адресации, не понимание типа данных и идеологии си). сюда, ролик анонс, на патреон полный разбор.
Краем глаза взглянув на превью видео, я подумал, что у Соера появилась кибер-рука, а оказалось, что это микро)
Охх, как же обожаю брутфорсить флаги компилятора
Ставить рядом LD и GCC несовсем корректно.
ld/as/ar/nm и другие - это binutils.
И, хотя, gcc содержит некоторые из этих утилит с "gcc-" префиксом в имени, линкер и ассемблер в нём не присутствуют. В этом легко убедиться, если собрать gcc в отдельную директорию(prefix /opt/gcc-11, например).
Ещё в ассемблерном листинге были директивы DWARF - тоже интересная и полезная штука.
Верно. Для binutils ничего по умолчанию не прописано. И для ld надо всё полностью прописывать ручками. И пути, и библиотеки. Линковать объектники точно так же можно командой gcc, или g++. Он сам вызовет ld. Но специфичные параметры линкеру придётся передавать через опцию -Wl,...
Отличный контент, такого мало.
Буду ждать с нетерпением видео про системы сборки. Очень познавательно, спасибо большое!
Зашёл случайно. Думал, что то новое расскажут, а тут совсем элементарные вещи для начинающих.)
Оо, годнота)
Спасибо. Очень полезное видео. Крайне мало такой информации в книгах нашел.
Благодарю за столь подробное освещение темы.
Отлично! Спасибо! Для меня как новичка, очень полезно.
Коллега спасибо. Профессионально и понятно.
Очень круто, побольше бы таких про видео!
Отличное видео. Всё по полочкам, без лишнего.
годнотаааааа. Soer, а ты не интересовался программированием под видеокарты, в т.ч. и низкоуровневым? если есть какие то зацепки было бы интересно от тебя ролик увидеть :-)
Мужик хорош, вышел из VIM и конечно же хорошо объяснил, спасибо) Однозначно ЛАЙК, мог бы, два поставил!
Отличное видео! А можно еще и про make системы? :)
Очень интересно, отличная подача. лайк подписка
Очень интересно, хотелось бы еще разбор Microsoft компилятора :)
Шикарное видео, спасибо S0ER!
Клавиатура приятно щёлкает)
Спасибо.
Как по мне, лучше было бы препроцессинг делать при помощи команды gcc -E hello.c > hello.i
Очень подробно, понял важность майна
Огромное спасибо за контент!
Спасибо за видео, ничего не понял, но очень интересно.
ключ компилятора -masm=intel создаст ассемблерный листинг в нотации интела, а не at&t
Я благодаря вам все проблемы с NASM решил!
Спасибо! Если возможно, расскажите как щапускается программа и как она взаимодействует с ОС во время работы:)
Взаимодействует с ОС она через системные вызовы. Для x86 это программное прерывание, либо шлюз вызова (адрес из таблицы дескрипторов). Для других архитектур есть отдельные команды, типа syscall, sc, и другие. Всё это вызывает обработчик прерываний (исключений), который запускается уже в привилегированном режиме (режиме ядра).
Офигенно! Спасибо за подробное интересное видео )
Супер! Спасибо!
Спасибо большущее, интересно и полезно.
Видео от S0ER - 🏆️🏆️🏆️ HIGHT QUALITY 🏆️🏆️🏆️
Спасибо, интересное видео!
Узнал достаточно больше чем знал.
Очень круто, спасибо
Познавательно спасибо
Нужны ещё такие видео
Круто, очень полезно!
Очень интересное видео!
Просто шик!
классное видео, жду продолжение серии
Класс! Спасибо. Лайк.
Спасибо большое. Я прочувствовал всю боль ручной сборки/линковки, с которой сталкивался, в очень ускоренном режиме )))
интересно, спасибо )
интересный контент, спасибо
Cool
Отличное видео!
Лучший !!!
Редкий материал.
Почему 14:09 при запуске ./hello (где SIGSEGV при выходе из main) не печатается "hello". Ведь сначала выполняется call printf, а SIGSEGV выскакивает уже после, при исполнении инструкции ret в main?
Еще недвано узнал что ошибку отуствия линковщика "file ./hello does not exist..." можно исправить через "path/to/existing/ld ./hello". Тогда не существующий линковщик, указанный в ELF hello, проигнорируется.
Потому что после hello нет
, если добавить, то будет отображаться hello потом текст ошибки на следующей строке
Мне одному при просмотре 11:52 не было очевидно, почему /lib/ld64.so.1 это "ошибочка", а /lib64/ld-linux-x86-64.so.2 это "всё замечательно"?
мне тоже, но как я понимаю, такие выводы можно сделать по метазнаниям об операционных системах, т.е. по окружении в котором происходит сборка.
Просто нет такого линкера в системе, поэтому и ошибочка.
@@S0ERDEVS Это как раз понятно. Непонятно, как надёжно определять это на глаз. Просто вспомнить? А если забыл/ не знал? Или ldd показал не три либы, а хотя бы несколько десятков? Ни сообщение об ошибке "could not be executed", ни вывод ldd достаточной информации не дают.
Это не автостарт, а рантайм (aka crt). Доводилось писать свой под голое железо.
Достаточно понятный С и асемблер (интуитивно). Вот если сравнивать с Андроид, то многое непонятно, начиная от языков, в которых ну очень длинные описания и заканчивая точкой входа. А ведь там тоже Линукс
спасибо
что реально 30-40 байт программа получались? Круто!
SOER, подскажи как делается автокомплит для командной строки как у тебя. Сам скрипт можно где-то глянуть?
это базовые возможности шела Fish
про препроцессинг не понятно.. пояснил бы что такое макросы, лэйнмейкеры
Спасибо, хочется понять, как правильно вставлять код асм в GCC, а то найденные описания на русском и англ. малопонятные.
Привет! спасибо за видос! а подскажи что за рамка сзади где инфа о подписчиках и канале?
Почему при отсутствии
в printf, курсор переходит на новую строку?
Может не по теме, но что это за эмулятор терминала и тема?
Спасибо
Спасибо! Особенно за CC лицензию, хотел о ней попросить ;)
Буду использовать и рекомендовать в своем курсе.
По поводу нотации ассемблера - это точно x86 а не LLVM какой-нибудь? я когда это увидел, заподозрил его, и что есть еще одна стадия из LLVM в x86. но там был clang. Это просто вспомнилось, тогда обсудить было не с кем, а сегодня есть ;)
А нет, это не LLVM, это именно AT&T нотация ассемблера, а LLVM это несколько другое, чем я о нем думал. Спасибо Soer за рекомендацию канала "Konstantin Vladimirov"!
Расскажите про книги, которые должен прочитать каждый программист. Например, - Чистый код
Чарльз Петцольд - код
лайк
Оптимизация при ассемблировании происходит?
Отличное видео, но название не раскрывает суть
Какие ещё есть асамблеры, синтаксисы, компиляторы asm ?
Masm, nasm, про всех них можешь почитать на той же википедии
как собрать андроид приложение в андроид устройстве если терминал не видит gcc, javac, даже если обьявить через path а если видит доступ запрещен даже если есть рут.Пожалуста сделайте видео на подобную тему.
Очень хочется писать программы прямо на андроиде и хочется понять как все это происходит
Соер, подскажи пожалуйста ..как читать программную документацию? То есть когда нет программы, но тебе говорят что надо почитать мануал/тз где расписаны элементы программы и тебе надо выучить работу программы именно по документам? Я даже не знаю на что обращать внимание в этом случае
Нашёл ответ?
здравствуйте. Наткнулась на вас сегодня. Узнала о проекте devs2devs, но на сайте пишет, что срок приглашения истёк. Этот проект уже не актуален?
Добрый день Евгений! Как Вы считаете, в какие направления с/с++ будут востребованы в будущем, за исключением написания драйверов и уп для контроллеров?
графика и звук, бэкенд в вебе, крипта.
почитайте про Nanite Virtualized Geometry, это революционная технология в графике
Кто постоянный зритель? С помощью какой программы он рисунок на монитор переводит?
Планшет XP Pen + OBS (захват экрана + фильтр по цвету фона), рисую в Krita, но можно любой софт на выбор.
@@S0ERDEVS спасибо, но я имел в виду, когда ручкой на обычном листочке рисуешь, а рисунок на экран выводится. В других видео :)
У вас в руках случайно не перо от гп huion?
а в винде рет работает, не надо никаких экзитов)
Попробовал слинковать вот так:
ld -e main -o hello main.o mylib.o /c/WINDOWS/System32/msvcrt.dll
Но выдаёт ошибку:
main.o:main.c:(.text+0x21): undefined reference to `__main'
Не подскажите в чём проблема. Линкую в windows 10
*include* же тот-же макрос, так-то
Здравствуйте, какое окружение терминала используете?
А где находятся данные о выделенной памяти? Ну, например, как система знает какую область памяти нужно очистить при удалении динамического массива? Могу ли я получить в программе размер этого массива? Например, если я в функцию передаю указатель на массив, но не передаю его размер. Могу ли я по ходу увеличить размер массива, не переписывая содержимое в новый более большой?
@@dx3mod а вот по всему тому, что Вы написали, есть какая-то литература или нужно всё по частям искать с помощью гугла? И ещё для меня сейчас актуально, может знаете, где почитать про многопоточное программирование на с++? Я находил кое-какую литературу, но хотелось бы ещё.
@@dx3mod будем искать. Спасибо.
Погугли memory layout linux/macos/windows
@@S0ERDEVS ок.
си в асм это вроде только у гцц.
На самом деле видео больше сбивает с толку, чем что-то разъясняет. Проблема не в том, что компилятор знает что-то хитрое, а том, что компилятор сам по себе собран для конкретной ОС и конкретной стандартной библиотеки (glibc). И эта библиотека требует определенной инициализации, за которую отвечают файлы типа crt0.o crti.o, crtn.o, которые нужно добавить при линковке. Без них правильная работа не гарантируется. Все вместе (компилятор, ассемблер, линкер плюс библиотека) называется тулчейн (toolchain). Кроме того процесс получения ассемблера и исходного кода конечно очень сильно упрощён, но это совсем отдельная история.
А можно сделать программу на С++, открыть её в виде ассемблера и юзать этот ассемблер для мк AVR?
Да, но нужен компилятор под avr.
Хм, а что если стандартная библиотека реализована не с помощью glibc?
Думаю compiler explorer будет здесь к месту: godbolt.org/
Какие книги надо читать чтоб такое знать?
2:23 - и как же мы смогли слинковать программу если у нас небыло необходимых зависимостей?
12:01 - а почему ldd не написал что файла /lib/ld64.so.1 не существует если его нет на диске?
1) например в portable сборке
2) не знаю
@@S0ERDEVS И что разве можно слинковать программу если на диске нет нужных *.so (или *.la) файлов, линковщик ошибку не выдаст?
Если в момент линковки не будет, то ругнется. При переносе или удалении библиотеки будет падать в рантайме.
Привет соер
Так и не нашел источника включающего aesni.h
Более подробное обозрение работы GCC и инструментов вокруг GCC от бывшего разработчика GCC-based компиляторов (сейчас работает над clang-based компилятором):
th-cam.com/play/PL3BR09unfgchnggx7IJuSU57mxjMhrSaq.html
Спасибо, поделился в сообществе ссылкой на канал
А где про это почитать?
Как сделать такой же красивый терминал как у тебя?
Поставь fish вместо bash
как сделать так, чтобы я смог понять что в этом видео произошло?
Сначала скажи, знаешь ли ты Си?
@@fj8017 вот учу, по книгам Миллера, и Прата, плюс курсы одни купил у Александра Гринорина
@@user-od3yv3kv4g Когда закончишь учить, поймёшь процентов 80 из сказанного. А так, если очень интересно, можно что-то почитать по теории компиляторов. Я сейчас читаю "Компиляторы. Принципы, технологии, инструменты". Книга объёмная, но интересная.
@@fj8017 я боюсь с моим уровнем знаний на данный момент я смогу понять процентов 5 содержания книг про компиляторы), но к себе в закладки обязательно добавлю, спасибо большое)
чтобы понять это, надо написать и собрать более менее сложную программу САМОМУ.
то есть практика, практика и еще практика. и чтение литературы в процессе))
а вообще не забивайте пока голову, не надо сразу в компиляторы лезть))
Во ты умный
Но ведь не обеспечЕния, а ОбеспЕчения.
Смотреть это, не зная ЯП можно или нет?)
почему бы и нет, всё равно потом столкнетесь
Порно среди туториалов
Не ЛИНКОВКА, а КОМПОНОВКА. НЕРУСЬ
Стесняюсь спросить "с хуя ли"?
@@S0ERDEVS Надо же, русский матершинный знаком Вам. А русский литературный понятный многим стеснительно использовать? Зря. Я хорошо знаю одного академика РАН (не РАЕН), одного из советника Президента РФ, который очень просто общается, обходясь в своей речи без жаргонизмов. Свободно владеет английским языком, как разговорным, так и техническим. Вот к чему надо стремиться. Любить родной язык, а не засорять его.
Подумайте об этом.
Какая пафосная речь, а на вопрос не ответили. Оно и понятно, ведь аргументов нет, да и быть не может. Язык - это живая конструкция, его нельзя притянуть "один мой знакомый академик".
Вы же просто пришли, не постесняюсь этого слова, повыебываться, нет у вас оснований считать, что слово "компоновка" лучше отражает смысл, чем слово "линковка". Ну кроме вашего утонченного вкуса, естественно, который на фоне тотального заимствования идей в АйТи и адаптации технического языка к иностранным словам выглядит слегка ортодоксально и поэтому глупо.
Один мой знакомый, тоже академик, тоже советник президента, говорит, что даже президент не прочь использовать жаргон и, не поверите, бранные слова он тоже знает. Он тоже нерусь?
А вот я лингвист-переводчик по первому образованию, и мне сразу резануло слух, что компоновка это якобы русское слово.
Сразу лезем в этимологический словарь:
«Компонент» - это имя существительное, которое употребляется в значении «составная часть чего-либо». Анализируемая лексема - заимствованная. Происходит от латинского «componens» (дословный перевод - «составляющий»).
И на слух слово "линковка" воспринимается лучше, потому что перед глазами в процессе работы ты всегда видишь эти слова - linkage, linker, linking, link, люди понимают друг друга с полуслова, а это главное - эффективность, а не борьба за справедливость.
Если я вам начну рассказывать далее про русский язык и его "чистоту", у вас вообще земля из-под ног уйдет наверно, живите в своем пузыре))
И напоследок, можете навести справки про связь русского с древним санскритом, удивитесь! Так вот бороться за чистоту языка имеет смысл как раз в плане того, чтобы сохранить эту древнюю связь с санскритом, но это уже сугубо мои умозаключения на основе того, что я знаю о языках и происхождении слов в них.
Латынь, кстати, тоже индо-европейский язык, вышел из прото-индоевропейского языка. Засим отпускаю вас, искать чистоту языков. Удачи!
PS в мате русском одни заимствования, в том числе из санскрита имеются
Клавиатура приятно щёлкает)
спасибо, интересно