В чем разница между компилятором и компоновщиком в C?
В чем разница между компилятором и компоновщиком?
Ответ 1
Компилятор преобразует код, написанный на человеко-читаемом языке программирования, в представление машинного кода, которое понимается вашим процессором. Этот шаг создает объектные файлы.
Как только этот шаг выполняется компилятором, необходим еще один шаг для создания исполняемого исполняемого файла, который можно вызвать и запустить, то есть связать вызовы функций (например), которые должен сгенерировать ваш скомпилированный код, чтобы работать, Например, ваш код может вызвать sprintf
, который является подпрограммой в стандартной библиотеке C. В вашем коде ничего нет фактического сервиса, предоставляемого sprintf
, он просто сообщает, что он должен быть вызван, но фактический код находится где-то в общей библиотеке C. Чтобы выполнить эту (и многие другие) связи, необходимо вызывать компоновщик. После связывания вы получаете фактический исполняемый файл, который может запускаться.
Ответ 2
Компилятор генерирует файлы объектных кодов (машинный язык) из исходного кода.
A linker объединяет эти файлы объектных кодов в исполняемый файл.
Многие IDE ссылаются на них последовательно, поэтому вы никогда не видите, как работает компоновщик. Некоторые языки/компиляторы не имеют отдельного компоновщика, и компоновка выполняется компилятором как часть его работы.