AnonymC
|
|
#1 | |
Первый вопрос из книги вильямса:Что такое компоновка - C++13.11.2009, 21:32. Просмотров 2316. Ответов 5
Метки нет Все метки)
(
что такое компоновка?Я читал в кyиге и понял что компоновка превращает файл срр в obj, так?тогда что такое obj, и почему сразу не cjздать файл *exe?
Добавлено через 24 минуты и еще у меня вопросик,в чем разница между интерпретатором и компилятором?
0
|
|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
|
13.11.2009, 21:32 |
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Первый вопрос из книги вильямса:Что такое компоновка (C++):
5
Вопрос: что такое ключ в списках? - C++ Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами? - C++
Что такое хэндлер файла? Что такое файловый указатель? - C++ Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них - C++ Первый вопрос о C++ =) - C++ |
Evg
![]() ![]() |
|
14.11.2009, 00:38 | #2 |
Этот процесс более правильно называется "трансляция", хотя зачастую термин "компиляция" употребляют именно для этого
Файл obj - это файл с кодом, но в котором ещё неизвестны адреса глобальных переменных и функций. Допустим, ты написал код по вызову printf'а, но самой процедуры printf у тебя в коде нет. В объектном файле построится код, где для вызова printf будет стоять операция call, но втом месте, где должен быть адрес printf останется дырка (т.е. нули в нужном количестве) и специальным образом это дырка подсвечивается типа "вот в таком-то месте должен стоять адрес printf". Эта дырка называется relocation (по русски переводят вроде как "перемещение"). Библиотеку на начальном этапе можешь тоже считать как объектный файл. Далее, когда тебе нужно получить исполняемую программу, запускается процесс линковки ("связывания", "компоновки"). В линковку подаются все объектные файлы и библиотеки. Линкер из всех этих файлов лепит исполняемый файл с кодом. Теперь, когда код имеется весь, линкер вычисляет для каждой переменной и функции её адрес, смотрит во всех местах relocation'ы и в нужные места прописывает правильный адрес. Таким образом у тебя получается финальный код, где всё связано друг с другом по адресам. Но вот на пальцах будет примерно так. Компилятору на вход подаётся программа на языке, а на выходе получается исполняемый файл, готовый к работе. Интерпретатор на выходе ничего не получает, он простоходит по файлу и по очереди исполняет каждую инструкцию языка. Грубо говоря, если поставлена задача "прочитать текстовый файл и для каждой строки напечатать её длину" то это в какой-то степени вырожденный случай интерпретации. Для каждого исполнения ты запускаешь свою программу (которая выполняет роль интерпретатора) и подаёшь ей на вход текстовый файл (который выполняет роль текста программы)
1
|
Evg
![]() ![]() |
|
14.11.2009, 12:14 | #6 |
Нет. Built - это процесс компиляции (т.е. преобразование исходника в самостоятельный бинарный файл). Дальше твой бинарный файл будет работать без компилятора и без исходника - т.е. действительно самостоятельный исполняемый файл
Чтобы запустить что-то на интерпретаторе, тебе всегда нужно иметь рядом саму программу-интерпретатор
0
|
14.11.2009, 12:14 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
14.11.2009, 12:14 |
Привет! Вот еще темы с ответами:
6
Шифр Вильямса - C++
Объяснить что такое "раздельная компиляция", что такое "интерфейс класса" и "реализация класса" на примере - C++ Что такое перегрузка оператора? Что у меня в коде за ошибка? - C++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |