Условная ссылка на @autoreleasepool - PullRequest
10 голосов
/ 17 октября 2011

Когда я пытаюсь запустить свое приложение в симуляторе iOS 4.3 (Xcode 4.2), происходит сбой при нажатии @autoreleasepool {}, с:

dyld: lazy symbol binding failed: Symbol not found: _objc_autoreleasePoolPush

Я оглянулся и вижу, как обойти это добавление libarclite_iphoneos.a. Есть версия этого для симулятора, также как libarclite_iphonesimulator.a.

Мне нужно добавить обе библиотеки в мой проект, чтобы он работал как на симуляторе, так и на оборудовании. Но что бы я ни строил, он жалуется, что другая библиотека предназначена для неподдерживаемой архитектуры.

Например, здание для симулятора:

ld: warning: ignoring file /Developer-4.2/Platforms/iPhoneOS.platform/
Developer/usr/lib/arc/libarclite_iphoneos.a, missing required architecture
i386 in file

Как мне исправить оба из них одновременно? Или я должен просто придерживаться старого синтаксиса NSAutoreleasePool сейчас?

Ответы [ 3 ]

10 голосов
/ 26 декабря 2011

После таких испытаний, как чистая, чистая папка, сброс iPhone Simulator и даже перезагрузка, я изменил IPHONE_DEPLYMENT_TARGET в настройке целевой сборки с iOS 5.0 на iOS 4.2.Работали.

1 голос
/ 17 октября 2011

Вы можете использовать настройку сборки Другие флаги компоновщика, чтобы связать библиотеку, и специализировать значение в зависимости от того, будет ли это «Любая iOS» или «Любой симулятор iOS».

0 голосов
/ 16 ноября 2011

Вы также можете объединить две статические библиотеки в одну универсальную библиотеку.Подойдите к Терминалу и скажите

lipo -create -output /where/you/want/it/libarclite_universal.a /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphoneos.a /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphonesimulator.a

Вы можете проверить полученный файл, сказав (в Терминале)

file /where/you/put/it/libarclite_universal.a

Он должен вывести:

libarclite_universal.a: Mach-O universal binary with 3 architectures
libarclite_universal.a (for architecture i386):current ar archive random library
libarclite_universal.a (for architecture armv6):current ar archive random library
libarclite_universal.a (for architecture armv7):current ar archive random library

Так какэта библиотека статически связана, ваше окончательное приложение не будет расти из-за включенной библиотеки sim, так как только то, что нужно вашему приложению, будет связано с вашим окончательным приложением.

...