Программа перекрестных ссылок

Andy спросил: 12 мая 2018 в 04:04 в: c++

У меня есть программа, которая помещает некоторые структуры в именованный раздел с помощью __attribute__ ((".sdh_ble_observers")) и extern mytype * ___start_sdh_ble_observers.

Я использую следующий скрипт компоновщика

SECTIONS
{
  .sdh_ble_observers :
  {
    PROVIDE(___start_sdh_ble_observers = .);
    KEEP(*(SORT(.sdh_ble_observers*)))
    PROVIDE(___stop_sdh_ble_observers = .);
  }
}
INSERT AFTER .data;

Когда я использую g ++ для связи приложения с использованием флага -T для скрипта компоновщика, исполняемый файл становится неисполняемым cannot execute binary file: Exec format error.

Когда я удаляю объявления extern в коде и не использую флаг -T в g ++, исполняемый файл отлично работает.

В чем причина этого? Платформа - cygwin.

1 ответ

Есть решение
Andy ответил: 12 мая 2018 в 05:31

Я только что нашел ответ на проблему.

Добавление инструкции выравнивания в раздел .sdh_ble_observers : ALIGN(0x1000) сделал трюк.