Переопределить символы компоновщика GCC в коде c, используя слабое объявление
Я строю мишень для эльфов. У меня есть скрипт компоновщика, в который я ввожу некоторые местоположения символов, такие как (эти символы определены в разных местах, таких как ПЗУ, адрес которого указан ниже),
A = 0x12345678;
B = 0x1234567c;
D = 0x1234568c;
В коде C я могу использовать эти переменные A и B, не объявляя их, как ожидается. Я хочу знать, могу ли я переопределить символ D, т. Е. Мой текущий исполняемый файл может иметь свое собственное объявление D. В этом случае компоновщик должен игнорировать D. Есть ли способ объявить символы в скрипте компоновщика как "слабые"? так что компоновщик может использовать "входные символы", только если он не объявлен ни в одном из связанных объектов.
1 ответ
Использование PROVIDE
директива
PROVIDE(D = 0x1234568c);
От ld
документация
В некоторых случаях желательно, чтобы скрипт компоновщика определял символ только в том случае, если на него есть ссылка и он не определен каким-либо объектом, включенным в ссылку.... Если, с другой стороны, программа определяет... компоновщик будет молча использовать определение в программе.