iOS: компиляция статических библиотек
Я пытаюсь собрать свою первую статическую библиотеку, и у меня проблема с компиляцией. Я имею в виду, что я могу скомпилировать свою библиотеку, и все выглядит хорошо, но когда я настроил тестовый проект для его тестирования, я получил такую ошибку:
ld: warning: игнорирование файла / Users /*/Desktop/TestApp/LibProva/libProva.a, файл создан для архива, который не является связываемой архитектурой (i386) Неопределенные символы для архитектуры i386: "_OBJC_CLASS_$_Prova", ссылка на которую указана из: objc-class-ref в AppDelegate.o ld: символ (ы) не найден для архитектуры i386 clang: error: сбой команды компоновщика с кодом выхода 1 (используйте -v для просмотра вызова)
ld: warning: игнорировать файл /Users/**/Desktop/TestApp/LibProva/libProva.a, файл создан для архива, который не связан с архитектурой (i386)
Так что, думаю, что-то не так с компиляцией (из-за разных архитектур в симуляторе и в устройстве), но я не могу понять, как это сделать правильно. Может кто-нибудь объяснить мне, как решить эту проблему?
1 ответ
Вы должны использовать lipo, чтобы создать универсальный бинарный файл:
#!/bin/bash
#build the device
echo building for ARM architecture
xcodebuild -sdk iphoneos4.3 "ARCHS=armv6 armv7" build > /dev/null
#build the simulator
echo building for the i386 architecture
xcodebuild -sdk iphonesimulator4.3 "ARCHS=i386 x86_64" "VALID_ARCHS=i386 x86_64" build > /dev/null
#make the folder
mkdir "Fat Binary"
#lipo suck it together
echo lipo binaries together
lipo -output Fat\ Binary/libmylib.a -create build/Release-iphoneos/libprefuse_visual_iOS.a build/Release-iphonesimulator/libmylib.a
echo lipo binary saved at $./Fat Binary/libmylib.a
echo copying headers
cp -R build/Release-iphoneos/usr "Fat Binary"
echo [COMPLETE]
Обязательно замените экземпляры libmylib.a
с фактическим названием .a
создано xcodebuild
,