#c #компиляция
Закрыт. Данный вопрос необходимо конкретизировать. Ответы на него в данный момент не принимаются. Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он был сосредоточен только на одной проблеме, отредактировав его. Закрыт 4 года назад. Можно объяснить, что такое препроцессор, компиляция, линковщик, как происходит сборка файлов, пошаговые этапы?
Ответы
Ответ 1
Очень коротко. Препроцессор делает текстовые преобразования исходного .c файла (в т.ч. вставляет текст из #include) и результат передается на вход компилятору. Компилятор преобразует свой вход (программу на языке Си) в объектный файл (.o), который содержит константы, машинные команды и таблицу внешних символов (переменные и функции к которым обращается этот исходный код, но которые в нем не определены). Линковщик (редактор связей) на основе результатов компилятора (.o файлы) и известных ему библиотек (по сути это те же .о файлы, но специальным образом скомпонованные) создает исполняемый файл (в винде .exe) или разделяемую библиотеку (в винде .dll, в *nix .so). При этом происходит так называемое разрешение внешних имен, т.е. ранее известные только по именам функции и внешние переменные обретают адреса и в соответствии с этим меняется код объектного файла (сами .o, естественно, не изменяются). Системный загрузчик (часть ядра ОС) читает исполняемый файл в память и проводит окончательную настройку адресов (если требуется), а также связывает этот машинный код с кодом в системных разделяемых библиотеках (они общие для всех программ в системе и их часто используемые части обычно уже подкачаны в память к моменту загрузки Вашей программы). Вопросы виртуальной памяти (преобразование виртуальных адресов в физические) я тут не рассматривал.
Комментариев нет:
Отправить комментарий