У меня есть сторонняя библиотека iOS, которая отлично работает в моем приложении и в симуляторе. Я пытаюсь извлечь из него объектные файлы, чтобы интегрировать его с другим сторонним программным обеспечением, которое переупаковывает объектные файлы с их собственным кодом. Однако я не могу извлечь объектные файлы через ar
; Я постоянно получаю сообщение об ошибке «Недопустимый тип или формат файла».
Рассматриваемая библиотека представляет собой толстую библиотеку с включенными armv7, armv7s и i386. Stock lipo
не знает о armv7 на моей машине, но Xcode знает:
$ lipo -info library.a
Architectures in the fat file: library.a are: armv7 (cputype (12) cpusubtype (11)) i386
$ xcrun -sdk iphoneos lipo -info library.a
Architectures in the fat file: library.a are: armv7 armv7s i386
Я могу успешно проредить его с помощью lipo
:
$ xcrun -sdk iphoneos lipo library.a -thin armv7 -output library-armv7.a
$ xcrun -sdk iphoneos lipo -info library-armv7.a
Non-fat file: library-armv7.a is architecture: armv7
Однако даже после прореживания я не могу манипулировать им с помощью ar
:
$ xcrun -sdk iphoneos ar -tv library-armv7.a
ar: library-armv7.a: Inappropriate file type or format
$ xcrun -sdk iphoneos ar -xv library-armv7.a
ar: library-armv7.a: Inappropriate file type or format
Я использую OS X 10.8.2, Xcode 4.6 с установленными инструментами разработки.
Есть ли какие-либо дополнительные шаги, которые я могу предпринять для этой проблемной библиотеки?
Обновление в ответ на комментарий Мартина
file
показывает следующее:
$ file library.a
library.a: Mach-O universal binary with 3 architectures
library.a (for architecture armv7): Mach-O object arm
library.a (for architecture cputype (12) cpusubtype (11)): Mach-O object arm
library.a (for architecture i386): Mach-O object i386
$ file library-armv7.a
library-armv7.a: Mach-O object arm
Похоже, это вовсе не библиотека!