Как извлечь объектные файлы из библиотеки iOS (на Mac)?

У меня есть сторонняя библиотека 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

Похоже, это вовсе не библиотека!


person Ian Terrell    schedule 13.03.2013    source источник
comment
Что команда файла напечатает для вашего архива?   -  person Martin R    schedule 13.03.2013
comment
Хм. Доставленная библиотека на самом деле уже является объектом... Это может свести на нет все это.   -  person Ian Terrell    schedule 13.03.2013
comment
Как насчет использования экстракта вместо разбавителя на липо? Я никогда не использовал тонкую команду - я не думаю, что она делает то, что вы хотите.   -  person escrafford    schedule 13.03.2013
comment
Extract на самом деле сохраняет его как толстую библиотеку, но только с одной архитектурой. Насколько мне известно, ar работает только с библиотеками с одной архитектурой. Думаю, Мартин меня разобрался с предложением изучить его через файл   -  person Ian Terrell    schedule 13.03.2013


Ответы (2)


«Библиотека» на самом деле не библиотека, а сам объектный файл. Дальше извлекать нечего.

person Ian Terrell    schedule 13.03.2013

Этот скрипт работает хорошо. Попробуй.

https://code.google.com/p/ompt-intel-openmp/source/browse/itt/libomp_oss/tools/extract-objects.pl

person tacke    schedule 23.01.2015