Как создать статическую библиотеку для iOS, не делая все символы общедоступными

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

Мотивация: Создание статической библиотеки для использования другими разработчиками iOS. Некоторые символы в библиотеке будут вызывать проблемы при экспорте, поэтому я хочу сделать их внутренними символами. С динамической библиотекой это легко, просто используйте аргумент -exported_symbols_list libtool ( ld ) и перечислите те, которые вы хотите сделать общедоступными. документация libtool не допускает этого аргумента для статических библиотек.

Библиотека имеет несколько файлов ObjectiveC .m, которые используют код друг друга. Только один класс в группе должен быть открыт для пользователей окончательного файла статической библиотеки .a.

Пробовал libtool -exported_symbols_list publicsymbols.exp , но этот аргумент libtool не поддерживается с -статическим для статических библиотек.

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

выглядит так, как будто ld может взять несколько файлов .o и связать их вместе в новый файл .o (с помощью аргумента -r ), и у него нет параметра «только динамический "отказ от ответственности для аргумента -exported_symbols_list (который может быть просто непонятной документацией ...).

просто в качестве теста я создаю свой проект с помощью Xcode, поэтому у меня есть все файлы .o, а затем попробуйте вызвать ld в командной строке, например:

ld -r -x -all_load -static -arch armv6 -syslibroot {path} 
   -filelist /Users/Dad/ABCsdk/iphone-ABClib/build/ABCLib.build/Distribution-iphoneos/ABCLib-device.build/Objects-normal/armv6/ABCsdk.LinkFileList 
   -exported_symbols_list {exp file path} -o outputfile.o

где объекты типа {path} имеют длинные пути к соответствующим местам.

но я получаю такие ошибки, как fo llowing:

/ usr / bin / ld_classic: /Users/Dad/ABCsdk/iphone-ABClib/build/ABCLib.build/Distribution-iphoneos/ABCLib-device.build/Objects-normal/armv6/ABCmain.o несовместимо, файл содержит неподдерживаемый тип раздела 3 (_ TEXT, _picsymbolstub4) в команде загрузки 0 (для использования необходимо указать «-dynamic»)

, поэтому что-то кажется неправильным ...

Кто-нибудь знает умный способ заставить эту работу работать? Спасибо.

12
задан Piotr Byzia 8 September 2011 в 11:47
поделиться