Алтай
Компоновщик. § 1. Между компилятором и загрузчиком.
Компоновщики, как и загрузчики, не являются самыми интересными для изучения, с точки зрения очень многих. Часто их воспринимают как просто еще один лишний шаг, который отделяет только что откомпилированную программу от запуска. Но это мнение ошибочно. Компоновщик это очень интересно! Не верите? Тогда давайте начнем разбираться. Между идеей, возникшей в голове автора программы, и выполняющейся ЭВМ программой дистанция огромного размера. И в этой дистанции есть несколько семантических разрывов. Что же это такое? Семантика это смысл, или суть...
Немного о линковки статических библиотек
Базовые понятия, кратко Совершенно неожиданное открытие сделал недавно. Оказывается порядок появления файлов на входе линковщика важен, если мы говорим о линковки статических библиотек. Для того что бы понять почему так происходит, нужно понимать принцип работы линковщика. Объектные файлы как предоставляют(экспортируют) символы(имена функций, переменных), так и ожидают(импортируют) их. Рассмотрим небольшой пример: int imported(int);
static int internal(int x) {
return x * 2;
}
int exported(int x) {
return imported(x) * internal(x);
}
Теперь скомпилируем этот файл: gcc -c test.c
nm test.o
000000000000000e...