2 / 2 / 0
Регистрация: 18.09.2021
Сообщений: 119
|
||||||||||||||||
1 | ||||||||||||||||
Компоновщик15.12.2022, 16:03. Показов 604. Ответов 8
Добрый день.
Люди, разбираюсь с процессом компиляции программы в c++, с помощью Visual Studio компилятора. В результате работы препроцессора я получил вот такие обработанные .cpp файлы, с заменными #include макросами: Main.i
0
|
15.12.2022, 16:03 | |
Ответы с готовыми решениями:
8
Компоновщик Компоновщик vs. Шаблоны QTableView и компоновщик QGridLayout Как создать динамический компоновщик? |
19405 / 10024 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
15.12.2022, 16:12 | 2 |
Bumis, *.i - это для вас файлы, они никуда не склеиваются.
Добавлено через 3 минуты После препроцессирования единицы трансляции компилируются независимо, получаются obj-файлы, которые затем компоновщик собирает в исполняемый файл. Т.е. исходный текст разных единиц трансляции никто вместе не "склеивает".
0
|
2 / 2 / 0
Регистрация: 18.09.2021
Сообщений: 119
|
|
15.12.2022, 16:14 [ТС] | 3 |
Я имею ввиду, что <после ассемблированая склеиваются их объектные файлы>.
Например, мы получили в процессе ассемблирования такие объектные файлы: Main.obj и Header.obj. Далее линкером они склеиваются в нечто цельное - сборку(.exe, .dll...).
0
|
19405 / 10024 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
15.12.2022, 16:18 | 4 |
Bumis, ну в объектных файлах уже нет никаких классов. Там машинный код по большей части.
Добавлено через 2 минуты Даже из того, что вы сами сейчас написали, должно быть ясно, что то, что делали вы (объединение исходного кода) и то, что делает компоновщик (объединение объектного кода (маш код + метаинформация и о нем)) - это совсем не одно и то же.
0
|
2 / 2 / 0
Регистрация: 18.09.2021
Сообщений: 119
|
|||||||||||
15.12.2022, 16:20 [ТС] | 5 | ||||||||||
Хм, как же "независимо", если при попытке скомпилировать такой код:
Header.cpp
0
|
19405 / 10024 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
15.12.2022, 16:25 | 6 |
Компилируется именно независимо.
Не компилятор, а компоновщик.
1
|
2 / 2 / 0
Регистрация: 18.09.2021
Сообщений: 119
|
|
15.12.2022, 16:34 [ТС] | 7 |
Ну теперь вернёмся к самому компоновщику, почему на повторные определения в независимых объектных файлах - он ругается, а на повторные объявления - нет?
0
|
19405 / 10024 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
15.12.2022, 16:43 | 8 |
Сообщение было отмечено Bumis как решение
Решение
Ну потому что объявлений нет в объектном коде.
Объявления существуют на этапе компиляции только. А про определения вот можете почитать: 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 [ТС] | 9 |
Понял вас. Спасибо большое за раскрутку <клубочка недопонимания>!
0
|
15.12.2022, 16:47 | |
15.12.2022, 16:47 | |
Помогаю со студенческими работами здесь
9
Компоновщик о ликовка программы это одно и тоже? Шаблонный класс от шаблонного класса, ругается компоновщик Как на физическом уровне работает компоновщик в приведенном случае Как влияет inline и обертка(#ifndef #define #endif) .h файла на компоновщик. Возможно ли подгрузить библиотеку так, чтоб компоновщик подгружал функции из основной программы? Курсовая работа "Паттерн Компоновщик. Расчет стоимости оборудования исходя из его составных частей." Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |