Разделите имена после связывания статической библиотеки

В проекте статической библиотеки для iOS 6 на некоторые функции в файле .c ссылаются другие, и поэтому они считаются глобальными символами, но не должны предоставляться пользователю этой библиотеки.

Как я могу strip вывести эти имена функций? Кроме того, как я могу скрыть эти имена файлов obj, чтобы никто не мог видеть имена .o в выводе nm?

Я пытался включить/установить:

  • Постобработка развертывания
  • Удаление символов отладки во время копирования
  • Разделить связанный продукт
  • Тип полосы: «Неглобальные символы» или «Отладочные символы».
  • Использовать отдельную полосу

ИЗМЕНИТЬ:

Я вижу, что есть еще один пункт настроек сборки «Дополнительные флаги полосы». Добавив в него флаг -R /path/to/symbol_list_file, команда strip уберет символы, указанные в файле, или -s /path/to/exported_symbol_list_file -u укажет на интерфейсы, оставив при этом неопределенные символы.


person ZhangChn    schedule 30.08.2013    source источник


Ответы (1)


Нет, ты не можешь. Статическая библиотека — это просто набор объектных файлов, и объектные файлы в статической библиотеке не имеют особых привилегий по сравнению с теми, кто использует статическую библиотеку.

Очевидно, вы можете strip окончательный двоичный файл.

Если вы должны скрыть символы, они должны быть static, что вынуждает вас использовать меньше файлов реализации, чтобы разрешить общий доступ к символу, что неудобно.

person trojanfoe    schedule 14.09.2013
comment
Что я могу сделать, чтобы скрыть детали реализации/информацию о связях, такие как пути к файлам .o от сторонних клиентов моей статической библиотеки? Можно ли его запутать, по крайней мере, в релизных сборках? - person ZhangChn; 14.09.2013
comment
@ZhangChn Ну, единственный способ, который я могу придумать, - это поместить всю реализацию (или, по крайней мере, то, что вы хотите защитить) в один файл .o в библиотеке. Это немного вздор, но, пожалуйста, скажите мне, что вы пытаетесь скрыть и почему? - person trojanfoe; 14.09.2013