2012-03-07 4 views
9

У меня есть опубликованное приложение, которое поддерживает как amrv6, так и armv7. Теперь у меня есть обновление, которое совместимо только с armv7 (я добавил внешнюю библиотеку, которая зависит от armv7). Когда я пытаюсь отправить приложение в магазин, я получаю сообщение об ошибке detailed inУсловное компиляция для armv6 и armv7

Я понимаю предыдущую ошибку, и мне нужно изменить свое приложение, чтобы оно поддерживало обе архитектуры. Моя проблема в том, что мой код зависит от библиотеки, которая совместима только с armv7. Если я изменю свойства моего проекта для поддержки как armv6, так и armv7, я получаю ошибку компиляции (подробности ниже). Мне нужно иметь возможность компилировать код с поддержкой обеих архитектур: armv7 компилируется с использованием библиотеки. Я полагаюсь на . Armv6 имеет другой код, который не зависит от библиотеки.

Как я могу это достичь?

Сведение об ошибке:

• the compile crash is in one Lib file (.a) and the error says : ld: warning: directory not found for option '-L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/gcc/arm-apple-darwin10/4.0.1' ld: in /Users/.../(lib file).a, file is universal but does not contain a(n) armv6 slice for architecture armv6 Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-gcc-4.2 failed with exit code 1

Заранее спасибо

+3

Возможно, вы захотите пометить свой вопрос iOS и xcode. Речь идет скорее о том, как создавать универсальные двоичные файлы с помощью этой инструментальной цепочки, чем вопрос о развертывании собственного диспетчера, зависящего от архитектуры, в ARM-сборке. –

ответ

4

Ну я понял, мой последний ответ в не правильный ... Apple, сказал, что это невозможно, но это не совсем верно ... спасибо Jim, я ищу немного больше, и я нашел один способ сделать это ..

  1. Удалить экспромты из «Фазы сборки»
  2. Добавить обе архитектуры в «Другие Флаги Linker» (Build Settings), для этого нужно нажать на + и добавить ARMv6 и ARMv7
  3. Добавить Либерал в ARMv7 .. с -l
  4. Не забудьте #if defined _ARM_ARCH_7 в вашем коде

Это как Джим, но более подробно.

1

В настройках сборки, если вы наведите курсор мыши на параметр, + кажется, что вы можете нажать на размах настройки для конкретного архитектура. Вам нужно будет удалить библиотеку из обычного списка библиотек и добавить ее, передав аргумент -L вручную только для armv7. Вероятно, вам также придется добавить определение препроцессора, чтобы вы могли поставить #ifdef s вокруг кода, который вызывает библиотеку.

Редактировать: Думая об этом, вы можете сделать это проще, пометив библиотеку как необязательный в разделе фаз сборки.

+1

Спасибо! но я не понимаю, где/что «удаляет библиотеку из обычного списка библиотек», я изменил «Пути поиска библиотек» и «Другие флаги компоновщика», с '+' Я создаю две строки с armv6 и armv7. Но теперь у меня есть новая ошибка, и детали говорят: «.. не найдено l (lib) .a« ..что-то вызывает Lib .. я удаляю все доказательства в коде, а также «необязательно» в разделе фаз сборки ... так вероятно, мне нужно удалить его в «обычный список», как вы сказали. – silvaric

+0

Я дал вам две альтернативы. Вы не должны пытаться делать это одновременно. – Jim

2

Я получил этот ответ от Apple:

Вы не можете условно построить приложение либо для ARMv6 или ARMv7. Ваша статическая библиотека должна быть построена как для armv6, так и для armv7, поскольку ваше приложение поддерживает обе эти архитектуры ... Вы можете отказаться от поддержки armv6, установив цель развертывания iOS в 4.3 или выше.

В принципе мне нужно задать разработчику библиотеки построить для обоих там архитектур (= /) или я установить свой минимальный уровень 4.3 и только ARMv7

0

Извините, я вставил неправильную вещь из буфера обмена.

Я хотел сказать:

Просто удалите плохую архитектуру из Действителен Архитектуры в Target Агилар настройки, и вы хорошо идти :)

0

Я была такая же проблема- так я переключил: «Построить Activate Архитектура только «да (в Target -> Build Settings»

Это работает ... сейчас

Я полагаю, что мое приложение не будет работать на iPhone 5, но мне придется ждать, пока. поставщик статической библиотеки, я использую build s это для armv7/armv7s

0

У меня была эта проблема для SDK Google Analytics iOS. Просто замена библиотеки последней версией - вот что разрешило эту проблему для меня.

Смежные вопросы