#iphone #objective-c #three20 #clang
#iPhone #objective-c #три20 #лязг
Вопрос:
Я получаю следующую ошибку при сборке для архива. Мое приложение отлично подходит для симулятора.
Ld "/Users/me/Library/Developer/Xcode/DerivedData/ProjectName-gflmmwtgzbpnsacgrofxwujnipkm/ArchiveIntermediates/app_core/InstallationBuildProductsLocation/Applications/ProjectName.app/ProjectName" normal armv7
cd /Users/me/Documents/pn-core-iphone-app
setenv IPHONEOS_DEPLOYMENT_TARGET 4.0
setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk -L/Users/me/Library/Developer/Xcode/DerivedData/ProjectName-gflmmwtgzbpnsacgrofxwujnipkm/ArchiveIntermediates/app_core/BuildProductsPath/Adhoc_Distro-iphoneos -L/Users/me/Documents/pn-core-iphone-app/External/OAuthConsumer -F/Users/me/Library/Developer/Xcode/DerivedData/ProjectName-gflmmwtgzbpnsacgrofxwujnipkm/ArchiveIntermediates/app_core/BuildProductsPath/Adhoc_Distro-iphoneos -F/Users/me/Documents/pn-core-iphone-app/External/GHUnit -filelist "/Users/me/Library/Developer/Xcode/DerivedData/ProjectName-gflmmwtgzbpnsacgrofxwujnipkm/ArchiveIntermediates/app_core/IntermediateBuildFilesPath/ProjectName.build/Adhoc_Distro-iphoneos/app_core.build/Objects-normal/armv7/ProjectName.LinkFileList" -dead_strip -ObjC -liconv.2 -lxml2 -miphoneos-version-min=4.0 /Users/me/Library/Developer/Xcode/DerivedData/ProjectName-gflmmwtgzbpnsacgrofxwujnipkm/ArchiveIntermediates/app_core/BuildProductsPath/Release-iphoneos/libThree20.a -lThree20Core -lThree20Network -lThree20Style -lThree20UI -lThree20UICommon -lThree20UINavigator -framework Foundation -framework UIKit -framework CoreGraphics -framework CoreLocation -framework SystemConfiguration -framework MapKit -framework CFNetwork -weak_framework AVFoundation -framework MessageUI -framework Security -weak_framework CoreVideo -weak_framework CoreMedia -framework QuartzCore -framework AudioToolbox -framework MobileCoreServices -lz.1.1.3 -weak_framework CoreTelephony -lOAuth -liconv /Users/me/Library/Developer/Xcode/DerivedData/ProjectName-gflmmwtgzbpnsacgrofxwujnipkm/ArchiveIntermediates/app_core/BuildProductsPath/Release-iphoneos/libZXingWidget.a -framework AddressBook -framework AddressBookUI -o "/Users/me/Library/Developer/Xcode/DerivedData/ProjectName-gflmmwtgzbpnsacgrofxwujnipkm/ArchiveIntermediates/app_core/InstallationBuildProductsLocation/Applications/ProjectName.app/ProjectName"
ld: library not found for -lThree20Core
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang failed with exit code 1
Наверное, я просто недостаточно знаю о командах clang и build в целом. Выглядит ли производный путь, который появляется непосредственно перед -lThree20Core, забавным для кого-то, кто может прочитать эту команду? (Я бы подумал, что перед ним должна быть буква «Л» или что-то в этом роде.)
Я проверил, что мои пути поиска в заголовке верны в соответствии с этим сообщением в блоге http://www.amirnaor.com/?p=112 , но я добавил проект three20 после того, как проект был обновлен, так что, похоже, это не проблема в любом случае.
Кто-нибудь знает, в чем здесь может быть проблема?
Ответ №1:
Если ваше приложение также не создано для работы с Xcode на реальном устройстве, то это означает, что в вашей библиотеке Three20Core нет двоичных данных для процессоров на устройствах iOS, только для процессора Mac. Если вы найдете файл libThree20Core.a или как он называется, а затем в «терминальном приложении» введите
> file <path-to-binary>/libThree20Core.a
вы должны увидеть что-то вроде этого
<path-to-binary>/libThree20Core.a (for architecture armv6): current ar archive random library
<path-to-binary>/libThree20Core.a (for architecture armv7): current ar archive random library
<path-to-binary>/libThree20Core.a (for architecture i386): current ar archive random library
если вы создаете libThree20Core.a самостоятельно, вам нужно будет создать версию для всех трех архитектур. Я не понял, как сделать это полностью в Xcode, похоже, вы можете настроить таргетинг только на процессор Mac или процессор iOS, а не на оба. Что вы можете сделать, так это создать библиотеку дважды: один раз для Mac и один раз для iOS. Вы можете объединить их в один файл .a, используя инструмент командной строки libo
> lipo -create -output libThree20Core.a libThree20Core_x86.a libThree20Core_arm.a
В качестве альтернативы вы можете попробовать настроить Xcode на использование разных путей поиска библиотек в зависимости от целевой архитектуры.
Комментарии:
1. К сожалению, прошло достаточно времени, чтобы я полностью не проверял этот ответ. В конце концов я заставил приложение скомпилироваться для обоих, но я перепробовал так много вещей, что понятия не имею, что я сделал, чтобы устранить проблему. В качестве единственного ответа ваш получает галочку!