Лучший подход - добавить таблицы разделов, требуемые для gcc. Если у вас есть работающий механизм динамической компоновки в генераторе, для него требуется та же информация, что и для вставки в таблицы разделов.
Для лени я написал общий файл сборки и использовал команду strip для получения контрольной точки. «Readelf --sections» показывает несколько разделов, но они вам не нужны. Я работал над этим и реализовывал разделы по порядку, пока он не начал работать правильно. Вот что я должен был добавить:
cheery@ruttunen:~/Documents/g386$ readelf --sections dynamic_hello.app
There are 5 section headers, starting at offset 0x1b9:
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .shstrndx STRTAB 00000000 000281 000024 00 0 0 1
[ 2] .dynamic DYNAMIC 00000000 0000b0 000050 08 WA 3 0 4
[ 3] .dynstr STRTAB 00000000 000158 000020 00 A 0 0 1
[ 4] .dynsym DYNSYM 00000000 000100 000040 10 A 3 0 4
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings)
I (info), L (link order), G (group), x (unknown)
O (extra OS processing required) o (OS specific), p (processor specific)
Это не повредит, если вы добавите больше разделов, чем эти, но этого достаточно для работы динамического связывания.