Как собрать данные из разных .a файлов в один массив? Как сохранить разделы в .a файлах с помощью ld скрипта? - PullRequest
4 голосов
/ 04 июля 2011

Мне нужно собрать данные из разных .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.

...