Этот вопрос задан раньше, но, вдаваясь в документацию по различным средствам разработки, кажется, что это возможно, просто не очевидно.
Мотивация: Создание статической библиотеки для использования другими разработчиками iOS. Некоторые символы в библиотеке вызовут проблемы при экспорте, поэтому я хочу сделать их внутренними символами. С динамической библиотекой это просто, просто используйте аргумент -exported_symbols_list
libtool
(ld
) и перечислите те, которые вы хотите публиковать. libtool
документация не позволит этот аргумент для статических библиотек.
В библиотеке есть несколько файлов ObjectiveC.m, которые используют код друг от друга. Только один класс в группе должен быть доведен до сведения конечного файла статической библиотеки .a.
Пробовал libtool -exported_symbols_list publicsymbols.exp
, но этот аргумент libtool
не поддерживается -static
для статических библиотек.
Невозможно сделать символы приватными с атрибутами (если это даже работает), потому что они необходимы другим .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} имеют длинные пути к соответствующим местам там.
но я получаю следующие ошибки:
/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 (необходимо указать "-динамический", который будет использоваться)
поэтому что-то кажется неправильным...
Кто-нибудь знает умный способ сделать эту работу? Спасибо.