Операционная система UNIX. Руководство программиста

Инкрементальное редактирование связей


Как уже отмечалось ранее, результат работы ld(1) можно исполь- зовать в качестве исходной информации для последующего редактирования связей, при условии, что сохраняется информация о настройке ссылок (то есть задана опция -r). Редактирование связей, использующее ранее полученную информацию, называется инкрементальным. Есть смысл разделять большие системы на несколько подсистем, связи внутри которых редактируются независимо, а затем, при необходимости, осуществлять пересборку системы в целом, например:

Шаг 1:

ld -r -o outfile1 ifile1 infile1.o

/* ifile1 */ SECTIONS { ss1: { f1.o f2.o . . . fn.o } }

Шаг 2:

ld -r -o outfile2 ifile2 infile2.o

/* ifile2 */ SECTIONS { ss2: { g1.o g2.o . . . gn.o } }

Шаг 3:

ld -a -o final.out outfile1 outfile2

Если подсистемы формируются разумно, то после перекомпиляции нескольких файлов придется повторить лишь часть процесса редактирования связей. Рекомендуется придерживаться двух простых правил:

  • Промежуточные вызовы редактора связей должны (посредством предложений SECTIONS) управлять только построением выходных секций из входных файлов и их секций, но не назначать адреса этим секциям.
  • Все операторы присваивания, а равно и предложения, управляющие размещением секций и конфигурацией памяти, следует включать только в окончательный вызов ld(1).



Содержание раздела