Как создать перемещаемый двоичный файл, который включает в себя только выбранные символы из библиотек? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь создать перемещаемый двоичный файл для встроенной системы, которая включает в себя только некоторые библиотеки. Он не будет содержать исходный файл, только библиотеки будут связаны в перемещаемый файл следующим образом:

ld -r -o <binary_name> --whole-archive <list of libraries>

Если я не использую опцию --whole-archive, то Полученный двоичный файл не содержит никаких символов, потому что я не связываю никакие объектные файлы, которые будут использовать символы. Итак, я использую --whole-архив, и бинарный файл успешно создан.

Теперь я хочу уменьшить размер двоичного файла. У меня есть только несколько приложений на моей встроенной системе, и поэтому я точно знаю, какие символы из списка библиотек будут использоваться моими приложениями. Итак, при связывании я хочу включить только этот набор символов в окончательный двоичный файл.

Например, предположим, что я пытаюсь связать lib c в перемещаемый двоичный файл. И предположим, мое приложение будет использовать только символ printf из lib c, тогда я хочу, чтобы мой перемещаемый двоичный файл содержал только printf и любые символы, используемые printf.

Есть ли способ достичь этого?

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Есть ли способ добиться этого?

Да:

ld -r -o <binary_name> -u printf <list of libraries>
0 голосов
/ 30 марта 2020

Быстрый и грязный способ может состоять в том, чтобы скомпилировать и связать таблицу указателей функций с нужными библиотечными функциями:

#include <stdio.h>

typedef void (*fn_t)(void);
fn_t fns[] = {
    (fn_t)printf,
};
...