Как получить список сброшенных символов, когда приложение iOS связано со статической библиотекой? - PullRequest
5 голосов
/ 01 декабря 2010

Я создаю статическую библиотеку iOS для использования третьими лицами.Он построен с использованием нескольких других статических библиотек, содержащих большое количество C ++, что приводит к огромной доставляемой библиотеке.

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

У меня есть пример приложения, которое использует все библиотечные API, и при его связывании большинство символов в библиотеке отбрасываются.Есть ли способ получить список этих символов?

Ответы [ 2 ]

0 голосов
/ 22 апреля 2011

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

  1. Свяжите исполняемый файл вашего примера приложения со статической библиотекой
  2. Запустите nm -uj, чтобы отобразить неопределенные символы в исполняемом файле.Поскольку библиотека была связана статически, единственными неопределенными символами должны быть символы, определенные стандартными библиотеками iOS
  3. Создание динамической версии статической библиотеки
  4. Свяжите исполняемый файл вашего примера приложения сдинамическая библиотека
  5. Запустите nm -uj для этого исполняемого файла.Неопределенные символы представляют собой объединение перечисленных на шаге 2 символов с библиотечными символами, на которые фактически ссылается исполняемый файл
  6. diff списки с шага 2 и шага 5. Это даст вам список символовтолько в библиотеке
  7. Запустите nm -js __TEXT __text для объектных файлов, чтобы получить список функций, экспортируемых каждым объектным файлом
  8. Добавьте в библиотеку только объектные файлы, которые экспортируют функцию, указанную вШаг 6.

Это может быть автоматизировано и, вероятно, нуждается в улучшении для учета символов, отличных от функций (например, глобальные переменные).

0 голосов
/ 08 января 2011

Этот ответ, по-видимому, указывает на то, что то, что вы хотите сделать, невозможно в GCC 3.x и 4.x:

Ограничение символов в статической библиотеке Linux

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...