Я строю исполняемый файл, используя GCC 3.4.0. Цель - встроенная система. Я использовал способ модульного определения «обработчиков команд консоли» путем определения указателя функции на обработчик в любом модуле компиляции, который должен находиться в определенном разделе компоновщика. Во время выполнения, когда команда вводится на консоли, я могу проходить по всем обработчикам в «разделе данных обработчика консоли», не имея центральной таблицы со ссылками на каждый обработчик.
Умный, умный, правильный, ну, теперь он кусает меня. Когда я делаю это в файле c, который не имеет других внешних ссылок на символы (например, мой обработчик является единственной функцией), компоновщик выбрасывает все это. Мой обработчик не включен в окончательный исполняемый файл, как и ничего другого в модуле компиляции.
- Хак - это определить фиктивную глобальную переменную в файле c и ссылаться на нее где-нибудь еще, тогда мой обработчик в этом разделе специальных данных включен.
- Я также могу использовать -u для компоновщика, и он работает, но поражает цель модульности.
- Я попытался использовать атрибут ((используется)) для моего обратного вызова, но безуспешно - похоже, его игнорируют.
- В моем специальном разделе есть спецификация KEEP, но это не помогает.
Есть идеи?
Спасибо,
Kurt