2 / 2 / 0
Регистрация: 18.09.2021
Сообщений: 119
|
||||||||||||||||
Компоновщик15.12.2022, 16:03. Показов 629. Ответов 8
Добрый день.
Люди, разбираюсь с процессом компиляции программы в c++, с помощью Visual Studio компилятора. В результате работы препроцессора я получил вот такие обработанные .cpp файлы, с заменными #include макросами: Main.i
0
|
15.12.2022, 16:03 | |
Ответы с готовыми решениями:
8
Компоновщик vs. Шаблоны QTableView и компоновщик QGridLayout |
19415 / 10033 / 2444
Регистрация: 30.01.2014
Сообщений: 17,697
|
|
15.12.2022, 16:12 | |
Bumis, *.i - это для вас файлы, они никуда не склеиваются.
Добавлено через 3 минуты После препроцессирования единицы трансляции компилируются независимо, получаются obj-файлы, которые затем компоновщик собирает в исполняемый файл. Т.е. исходный текст разных единиц трансляции никто вместе не "склеивает".
0
|
2 / 2 / 0
Регистрация: 18.09.2021
Сообщений: 119
|
|
15.12.2022, 16:14 [ТС] | |
Я имею ввиду, что <после ассемблированая склеиваются их объектные файлы>.
Например, мы получили в процессе ассемблирования такие объектные файлы: Main.obj и Header.obj. Далее линкером они склеиваются в нечто цельное - сборку(.exe, .dll...).
0
|
19415 / 10033 / 2444
Регистрация: 30.01.2014
Сообщений: 17,697
|
|
15.12.2022, 16:18 | |
Bumis, ну в объектных файлах уже нет никаких классов. Там машинный код по большей части.
Добавлено через 2 минуты Даже из того, что вы сами сейчас написали, должно быть ясно, что то, что делали вы (объединение исходного кода) и то, что делает компоновщик (объединение объектного кода (маш код + метаинформация и о нем)) - это совсем не одно и то же.
0
|
2 / 2 / 0
Регистрация: 18.09.2021
Сообщений: 119
|
|||||||||||
15.12.2022, 16:20 [ТС] | |||||||||||
Хм, как же "независимо", если при попытке скомпилировать такой код:
Header.cpp
0
|
2 / 2 / 0
Регистрация: 18.09.2021
Сообщений: 119
|
|
15.12.2022, 16:34 [ТС] | |
Ну теперь вернёмся к самому компоновщику, почему на повторные определения в независимых объектных файлах - он ругается, а на повторные объявления - нет?
0
|
19415 / 10033 / 2444
Регистрация: 30.01.2014
Сообщений: 17,697
|
|
15.12.2022, 16:43 | |
![]() Решение
Ну потому что объявлений нет в объектном коде.
Объявления существуют на этапе компиляции только. А про определения вот можете почитать: https://ru.wikipedia.org/wiki/... пределения И еще вот: https://www.youtube.com/watch?v=G_jcBrrYPAs (там начало видео по теме)
1
|
2 / 2 / 0
Регистрация: 18.09.2021
Сообщений: 119
|
|
15.12.2022, 16:47 [ТС] | |
Понял вас. Спасибо большое за раскрутку <клубочка недопонимания>!
0
|
15.12.2022, 16:47 | |
Помогаю со студенческими работами здесь
9
Компоновщик о ликовка программы это одно и тоже? Шаблонный класс от шаблонного класса, ругается компоновщик Как на физическом уровне работает компоновщик в приведенном случае Как влияет inline и обертка(#ifndef #define #endif) .h файла на компоновщик. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
|
Многопоточное программирование в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
|
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
|
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
|
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
|
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
|
Образование и практика
Igor3D 21.03.2025
Добрый день
А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
|
Lazarus. Таблица с объединением ячеек.
Massaraksh7 21.03.2025
Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и все разные. На Delphi я использовал для этих целей TStringGrid, и то, кривовато получалось. А в. . .
|
Async/await в Swift: Асинхронное программирование в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
|
Колмогоровская сложность: Приёмы упрощения кода
ArchitectMsa 20.03.2025
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы. . .
|