170 похожих чатов

Вопрос про этапы компиляции. Прочитал что на этапе препроцессинга выполняется

замена подключения библиотек на их содержимое и после этапа компиляции происходит компоновка объектных файлов с теми же библиотеками. Зачем это делается, если их содержимое уже в объектных файлах?

15 ответов

2 просмотра

Содержимое хедеров зачастую не содержит реализации, поэтому на этапе линковки эту реализацию надо уточнить

Denys-Khodakov Автор вопроса
Denis P
Содержимое хедеров зачастую не содержит реализации...

То есть через полученные прототипы можно получить реализацию из cpp файла, связанного с библиотекой, при линковке?

Denys Khodakov
То есть через полученные прототипы можно получить ...

Пусть в хедере например объявление функции, реализации там нет, поэтому когда компилятор компилирует объектник, он просто отметит что реализации тут нет, и это уже проблемы линкера будут ее найти и подставить

Где ты такой бред прочитал? Срочно шли нам источник, чтобы мы передали его анафеме

На этапе компиляции, элементом которой является препроцессор, вообще никаких действий с библиотеками не производится

#фазы #компиляция На вход препроцессора поступает исходных файл, например: #include <iostream> int main() { std::cout << "hello" << std::endl; } Препроцессор обрабатывает инструкции # и на выходе получает единицу трансляции (translation unit). В частности, #include просто включает кусок текста из файла в исходный файл. Препроцессирование выполняется до тех пор пока все инструкции # не будут обработаны. Единица трансляции поступает на вход компилятора, где уже и происходит лексический и синтаксический анализ, на выходе получается объектный файл. Далее объектные файлы + библиотеки (стандартная в частности) поступают на вход компоновщику (линкер, редактор связей), где уже и происходит разрешение (связывание, resolving) всех символов с определениями и на выходе получается исполняемый файл.

Denys-Khodakov Автор вопроса
Anatoly Shirokov
#фазы #компиляция На вход препроцессора поступает ...

За стандартные библиотеки при линковке я и не понимаю. Они уже заранее откомпилированы или обрабатываются также как и все остальные модули проекта(*.h и *.cpp)?

Denys Khodakov
Спасибо

ты разницу между #include и линковкой со стандартной библиотекой понял?

Denys-Khodakov Автор вопроса
Anatoly Shirokov
ты разницу между #include и линковкой со стандартн...

При нашем .h файле его содержимое переносится в .cpp файл и при линковке в других .cpp файлах нашего проекта происходит поиск реализаций. При линковке с библиотекой происходит поиск в lib файлах?

Denys Khodakov
При нашем .h файле его содержимое переносится в .c...

при линковке поиск определений символов происходит и в наших объектных файлах и в указанных библиотеках.

линкер более устоявшееся тут всё таки чем компоновщик

Denis P
линкер более устоявшееся тут всё таки чем компонов...

редактор связей, компоновщик, линкер - все это ходит в обиходе

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
75
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Всем привет! поделитесь, пож-та, как кто дебажил / решал проблему с 504 Time out ошибкой от nginx, когда стучишься на свой vapor сервер? в логах /var/log/nginx/error.log е...
Paul
24
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Обязательно ли смена методологии обучения алфавиту при смене алфавита(реформе письменности) - нет. А при смене глиненых табличек на попирус, нужно ли менять методологию обучен...
Spiker01
8
Я тут пытаюсь переработать архитектуру подсистемы памяти ядра во что-то осмысленное. Есть pmm, который создает набор range’ей(пока что только для ядра, потом для юзерспейса), ...
Evg Resh
19
а китайский фольц такой же как немецкий? а то я вижу китайские черри через год эксплуатации -- ну эээ оно такое...
Vyacheslav Olkhovchenkov
13
Проблема с Windows scripting control Множество объектов получают iDispatch обертки и отдаются в скрипты. При этом скрипты могут эти обертки держать живыми очень долго, наприм...
Arioch The
16
Товарищи, объясните недалекому: спустя какое-то время tgbot перестал отправлять сообщения. В логах пусто, просто уснул. Видел в issues на гите, что проблема не только у меня. ...
advanc3d
9
Карта сайта