Переопределить символы компоновщика GCC в коде c, используя слабое объявление

Я строю мишень для эльфов. У меня есть скрипт компоновщика, в который я ввожу некоторые местоположения символов, такие как (эти символы определены в разных местах, таких как ПЗУ, адрес которого указан ниже),

A = 0x12345678;
B = 0x1234567c;
D = 0x1234568c;

В коде C я могу использовать эти переменные A и B, не объявляя их, как ожидается. Я хочу знать, могу ли я переопределить символ D, т. Е. Мой текущий исполняемый файл может иметь свое собственное объявление D. В этом случае компоновщик должен игнорировать D. Есть ли способ объявить символы в скрипте компоновщика как "слабые"? так что компоновщик может использовать "входные символы", только если он не объявлен ни в одном из связанных объектов.

1 ответ

Использование PROVIDE директива

PROVIDE(D = 0x1234568c);

От ld документация

В некоторых случаях желательно, чтобы скрипт компоновщика определял символ только в том случае, если на него есть ссылка и он не определен каким-либо объектом, включенным в ссылку.... Если, с другой стороны, программа определяет... компоновщик будет молча использовать определение в программе.

Другие вопросы по тегам