три20 связанных clang ошибка ссылки при сборке для архива в Xcode 4.2 - PullRequest
2 голосов
/ 31 октября 2011

Я получаю следующую ошибку при сборке для архива. Мое приложение отлично подходит для симулятора.

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, показаться забавным тому, кто может прочитать эту команду? (Я бы подумал, что перед ним должен быть -L или что-то в этом роде.)

Я подтвердил, что мои пути поиска в заголовке правильны согласно этому сообщению в блоге http://www.amirnaor.com/?p=112,, но я добавил проект three20 после того, как проект был обновлен, так что в любом случае это не является проблемой.

Кто-нибудь знает, в чем может быть проблема? * * 1010

1 Ответ

0 голосов
/ 20 марта 2012

Если ваше приложение не предназначено для работы с 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 для использования различных путей поиска библиотек в зависимости от целевой архитектуры.

...