2016-10-25 3 views
0

У меня есть проект iOS, который отлично подходит для симуляторов, но который имеет ошибки компилятора при построении для общего устройства или когда я пытаюсь запустить реальное устройство через Xcode. ПРИМЕЧАНИЕ: фактические ошибки компилятора, а не ошибки компоновщика или развертывания. Ошибки связаны с несогласованными типами в typedefs - как если бы они включали заголовки из другого SDK или имели разные препроцессоры.Какие настройки компилятора меняются при изменении целевого устройства?

Мой вопрос: какие настройки компилятора меняются при изменении целевого устройства в пользовательском интерфейсе Xcode и где я могу просмотреть различия? Я не вижу различий при просмотре настроек проекта и изменении целевого устройства - в частности, целевая версия развертывания и версия SDK остаются неизменными.

Проект, используемый для сборки с любым из этих целевых устройств под Xcode 7, но не под Xcode 8. Я подозреваю, что это до версии SDK, которая поставляется с Xcode. Но для того, чтобы работать с некоторыми целевыми устройствами, а не с другими, он должен менять параметры компилятора. Это должно быть очень просто исправить, если бы я мог видеть, какие изменения он делает!

Вот линия (в моем коде), который не может скомпилировать:

typedef  void*   IOSurfaceRef; 

А вот сообщение об ошибке:

error: typedef redefinition with different types ('void *' vs 'struct __IOSurface *') 

Пожалуйста, обратите внимание, я не хочу помочь фиксируя ошибку или совет о том, что он пытается сделать - Я знаю, что это не хорошо. Я просто хотел бы узнать, какие настройки компилятора изменены путем переключения целевого устройства.

+0

Обновите свой вопрос с помощью фактического действительного кода, связанного с ошибкой, и публикуйте полные, точные, фактические ошибки. – rmaddy

+0

Спасибо, это разумный запрос. Тем не менее, я не хочу помогать исправлять ошибки - я спрашиваю, какие настройки компилятора изменены, изменяя целевое устройство и опасаясь, что код будет сбрасываться на вопросы о том, почему код делает $ HIGHLY_QUESTIONABLETHTH ... –

+0

Это ваш typedef или это в коде Apple/3rd Party? – dan

ответ

1

Это терпит неудачу, потому что CGBase.h содержит этот код:

#if !TARGET_IPHONE_SIMULATOR 

typedef struct CF_BRIDGED_TYPE(id) __IOSurface *IOSurfaceRef __attribute__((swift_name("IOSurfaceRef"))); 

#endif 

Когда вы строите для устройства директивы препроцессора #if !TARGET_IPHONE_SIMULATOR верно, так что ваш код имеет два typedef с для IOSurfaceRef с конфликтующими типами.

+0

Спасибо. Похоже, CGBase.h из iOS SDK, который поставляется с Xcode 7, не имеет декларации для IOSurfaceRef, поэтому он работает раньше. –

+0

Итак, ответ на мой вопрос, сформулированный как «При изменении целевого устройства, препроцессорные директивы (например, TARGET_IPHONE_SIMULATOR) меняются" –

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