Заметка. Как извлечь объектные файлы из статических библиотек и объеденить их в другую.

 К примеру есть отдельное SDK, написанное кем-то, есть система сборки, и есть собранный SDK. В собранном SDK есть много статических библиотек на выходе:

lib1.a
lib2.a
...
libn.a

Есть задача вытянуть только определенный функционал из SDK. Без модификаций кода, и системы сборки, можно просто скопировать нужный needed_functional.h в проек, и попробовать собрать, но мы сразу получаем ошибку на этапе линковки, что-то вроде undefined symbols for ...
соответственно, можно либо скопировать нужные библиотеки из SDK либо пойти по пути уменьшения общего объема(и колличества) конечной библиотеки. Как это сделать?
1) Искать в каких объектных файлах находятся недостающие символы при линковке
2) Извлекать эти объектные файлы из статической библиотеки
3) Объединять эти объектные файлы в одну библиотеку.
Для этого всего нужны следующие команды
nm obj.o
или
nm lib.a
Выводит содержимое этой библиотеки или объектного файла(список функций),
если перед именем функции есть буква U значит эта функция используется этой библиотекой, но находится где-то в другой библиотеке.

Чтобы извлечь объектный файл из статической библиотеки, нужно выполнить эту команду
ar -xv lib.a needed_obj.o

Чтобы объединить много объектных файлов в одну статическую библиотеку, выполните эту команду
ar -rcs my_new_lib.a path/*.o
все объектные файлы которые находятся по пути path будут объеденены в статическую библиотеку my_new_lib.a

Комментарии