Мне нужно собрать данные из разных .a файлов в один массив.Я делаю это, собирая данные в один раздел
первый файл .c
TArElement __attribute__((section(".my.special.section"))) uwiveuve = { ...
второй файл .c
TArElement __attribute__((section(".my.special.section"))) egwegwxb = { ...
и т. Д.
вСкрипт ld
__my_mega_array_begin = ABSOLUTE(.);
KEEP(*(.my.special.section))
__my_mega_array_end = ABSOLUTE(.);
в основном файле .c
extern TArElement *__my_mega_array_begin
extern TArElement *__my_mega_array_end
const t_size array_size = __my_mega_array_end - __my_mega_array_begin;
Так что любой может связать свой код с моим кодом, и мой код будет знать о данных в его коде.Хорошо, это работает, но не на самом деле ... Проблема в том, что директива KEEP полностью работает с файлами .o, но не .a.если в конкретном файле .o внутри файла .a не используются разделы, тогда весь файл .o будет исключен из ссылок, даже если используется директива KEEP.
Использование параметра --whole-arhive для ld будетпомочь, но я не могу использовать эту опцию по некоторым причинам.Я должен делать все только с файлом сценария ld ...
Еще один способ решить проблему - использовать частичное связывание, создав перемещаемый файл.Таким образом, все файлы .o внутри .a будут связаны с одним файлом .o.Но я также не могу использовать частичное связывание.
Так что я должен делать это только с помощью сценария ld и файла .a.