2015-07-08 4 views
1

Я пишу код для встроенной платформы. Мне нужно связать с сторонним SDK. Однако символы из этого SDK должны идти в определенную секцию (не .text). Можно ли это сделать?Как связать статическую библиотеку с конкретным разделом?

Я использую инструментальную цепочку на основе GNU для процессора xtensa-lx106 и создаю для чипа ESP8266.

+0

Как вы ожидаете, что кто-нибудь сможет ответить, не указывая, какую систему и компилятор вы используете? – Lundin

+0

@ Lundin спасибо, отредактирован. – RostakaGmfun

ответ

2

Для этого вам необходимо изменить скрипт компоновщика, который вы используете.

Скорее всего, вы найдете его в своем make-файле в строке, которая связывает окончательный двоичный файл. Сценарий компоновщика - это файл, переданный через опцию -T.

Как только у вас есть это, откройте его в текстовом редакторе и найдите директиву SECTION. Вероятно, вы найдете группу, которая называется .text, в которой перечислены все разделы, которые должны войти в конечный сегмент текста.

Вы можете просто добавить название кодового раздела SDK в этот список. Вы даже можете использовать подстановочные знаки, если в SDK есть несколько разделов с общим префиксом (что довольно много происходит).

То же самое можно сделать с помощью группы .data и группы .bss, если это необходимо.

После этих модификаций вы можете повторно связать свой исполняемый файл, а разделы из библиотеки SDK должны идти прямо в группы и .data.

Если вы хотите, вы также можете создать новые группы в объявлении MEMORY в верхней части файла компоновщика. Это дает вам прямой контроль над точным адресом, который будет использовать компоновщик. Затем вы можете перенаправить разделы библиотеки SDK прямо в новые области памяти, которые вы создали, и у вас есть библиотеки всегда на одном и том же адресе.

Смежные вопросы