Ошибка связывания XCode при нацеливании на armv7 - PullRequest
5 голосов
/ 10 мая 2010

Я уже провел бесчисленные часы, ломая голову над этим, используя поиски Google и другие вопросы о переполнении стека, но безрезультатно.

У меня есть универсальное приложение для iPhone / iPad, которое, кажется, прекрасно компилируется, когда цельARMv6.Однако, когда устройством является iPad, я получаю это предупреждение:

warning: building for SDK 'Device - iPhone OS 3.2' requires an armv7 architecture.

Как ни странно, приложение все еще отлично работает на iPad, несмотря на это предупреждение.Тем не менее, я хочу делать вещи «правильным образом», что бы это ни значило в данном случае.Когда я переключаю целевую архитектуру на armv7, я получаю ошибки компоновки:

  "___restore_vfp_d8_d15_regs", referenced from:
     *redacted*

  "___save_vfp_d8_d15_regs", referenced from: 
     *redacted*

ld: symbol(s) not found

collect2: ld returned 1 exit status

«Отредактированные» части ошибок являются ссылками на статическую библиотеку, с которой я пытаюсь связать.

Вот что я попробовал из множества предложений онлайн.Каждый из них был предложен несколько раз без какого-либо объяснения, что наводит меня на мысль, что никто не совсем понимает эту проблему:

"Никогда не используйте выпадающее меню в верхнем левом углу окна XCode, чтобы выбратьtarget. Вместо этого установите для этого параметра Base SDK, а затем Base SDK для iPhone OS 3.0 в целевой конфигурации. Установите целевое устройство на предпочитаемую цель (iPad, iPhone OS 3.2 в моей ситуации.) "

Это приводит к ошибке "Библиотека не найдена для -lcrt1.3.1.o"

"Убедитесь, что GCC не связывается с неверной версией стандартной библиотеки. (У вас будетчтобы убедиться, что в LIBRARY_SEARCH_PATH нет неправильного пути.) "

Мой LIBRARY_SEARCH_PATH уже пуст, так что это не имеет значения.

"Попробуйте скомпилировать с GCC 4.0, а не с GCC 4.2."

Я получаю синтаксическую ошибку в заголовочном файле UIKit.Ошибка «Синтаксическая ошибка перед токеном AT_NAME».Строка "UIKIT_EXTERN @interface UILocalizedIndexedCollation: NSObject."

Другой проект прекрасно компилируется с такими же настройками цели, , что действительно заставляет меня усомниться в моем здравомыслии.Могу ли я иметь дело с испорченным проектом XCode?

Если кто-то знает, что на самом деле происходит, и имеет ссылку, или не против объяснить это, я был бы очень благодарен.

Ура!

Ответы [ 4 ]

4 голосов
/ 10 мая 2010

VFP между ARMv7 и ARMv6 отличается по-разному. В ARMv7 обычно предпочтительнее использовать NEON. Проблема в том, что ваша статическая библиотека зависит от VFP в ARMv6 - вам нужно либо скомпилировать библиотеку в ARMv7, либо оставить все приложение в ARMv6.

Возвращаться к GCC 4.0 глупо - поддержка ARMv7 в то время практически отсутствовала, если Apple не поддерживала ее.

1 голос
/ 11 мая 2011

У меня были те же ошибки за исключением того, что было для armv6. Я исправил их, сняв флажок «Compile for Thumb» в настройках проекта для статической библиотеки и основного проекта.

0 голосов
/ 02 августа 2013

Что касается ошибки AT_NAME, одна из возможностей - Проверить, не пропущен ли @end в классе.

Чтобы узнать больше об ошибке AT_NAME, перейдите по следующей ссылке

http://iosdevelopertips.com/xcode/error-syntax-error-before-at_name-token.html

0 голосов
/ 30 сентября 2010
...