Каковы различия между компилятором и компоновщиком? - PullRequest
34 голосов
/ 30 сентября 2010

В чем разница между компилятором и компоновщиком в C?

Ответы [ 2 ]

67 голосов
/ 30 сентября 2010

Компилятор преобразует код, написанный на понятном человеку языке программирования, в представление машинного кода, понятное вашему процессору. Этот шаг создает объект файлы.

После выполнения этого шага компилятором требуется еще один шаг для создания рабочего исполняемого файла, который можно вызывать и запускать, то есть связывать вызовы функций (например), которые должен вызывать ваш скомпилированный код для работы , Например, ваш код может вызвать sprintf, что является процедурой в стандартной библиотеке языка C. Ваш код не имеет ничего, что делает фактический сервис, предоставляемый sprintf, он просто сообщает, что он должен быть вызван, но фактический код находится где-то в общей библиотеке Си. Для выполнения этой (и многих других) связей должен быть вызван linker . После компоновки вы получаете реальный исполняемый файл, который можно запустить.

24 голосов
/ 30 сентября 2010

Компилятор генерирует файлы объектного кода (машинный язык) из исходного кода.

A компоновщик объединяет эти файлы объектного кода в исполняемый файл.

Многие IDE вызывают их последовательно, поэтому вы никогда не увидите компоновщика в работе. Некоторые языки / компиляторы не имеют отдельного компоновщика, и компиляция выполняется компилятором как часть его работы.

...