Условная компиляция для armv6 и armv7 - PullRequest
9 голосов
/ 07 марта 2012

У меня есть опубликованное приложение, которое поддерживает amrv6 и armv7.Теперь у меня есть обновление, которое совместимо только с armv7 (я добавил внешнюю библиотеку, которая зависит от 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

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

Ответы [ 6 ]

4 голосов
/ 15 марта 2012

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

  1. Удалить lib из "Фазы сборки"
  2. Добавить обе архитектуры в "Другие флаги компоновщика"(Настройки сборки) , для этого вам нужно нажать на + и добавить armv6 и armv7
  3. Добавить библиотеку в armv7 .. с помощью -l
  4. Не забудьте#if defined _ARM_ARCH_7 в вашем коде

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

2 голосов
/ 09 марта 2012

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

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

По сути, мне нужно попросить разработчика библиотеки построить для обеих этих архитектур (= /), или я установил минимальную цель на 4,3 и только на armv7

1 голос
/ 07 марта 2012

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

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

0 голосов
/ 26 декабря 2012

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

0 голосов
/ 17 сентября 2012

У меня была такая же проблема, поэтому я переключил: «Build Activate Only Only» только в Target -> Build Settings »

Это работает ... пока.

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

0 голосов
/ 13 сентября 2012

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

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

Просто удалите плохую архитектуру из Valid Architectures в Target Aguilar Settings, и все готово:)

...