Этот вопрос задавался раньше, но если углубиться в документацию по различным инструментам разработки, кажется, что это возможно, но не очевидно.
Мотивация:
Создание статической библиотеки для использования другими разработчиками 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»)
, поэтому что-то кажется неправильным ...
Кто-нибудь знает умный способ заставить эту работу работать? Спасибо.