У меня есть 2 файла obj, собранных с GNU как , они:
- a.o: моя основная программа
- b.o: некоторые служебные функции
a.o не имеет точки входа. Последний связанный файл будет загружен в память, и выполнение перейдет к самому начальному загруженному адресу, где находится первая инструкция из .o.
Теперь я хочу связать их вместе с GNU ld . И я хочу, чтобы a.o появился перед b.o в конечном файле. Как я мог контролировать это? Должен ли я сделать пользовательский раздел и написать в сценарии компоновщика, как это:
SECTIONS
{
. = 0x7c00;
.text : { *(.text) }
.my_custom_section : { *(.my_custom_section) }
.data : { *(.data) }
.bss : { *(.bss) }
}
OUTPUT_FORMAT(binary)
Обновление
Что-то не так с этим вопросом? Я написал это неправильно? Если да, пожалуйста, дайте мне знать, ребята. Большое спасибо.
В настоящее время я обнаружил, что последовательность командной строки входных файлов, по-видимому, актуальна.
Если я так и сделаю:
ld a.o b.o -o final.bin
Содержимое из a.o будет отображаться до b.o.
Если я так и сделаю:
ld b.o a.o -o final.bin
Иначе будет.
Это означает, что будет управляться таким образом?