iOS - Ошибка синтаксического анализа Ускорение Framework
У меня очень странная проблема, только в моем проекте. Я использую XCode 4.3.6 и пытаюсь добавить Accelerating Framework в свой проект. Так что в моем файле я просто делаю простую инструкцию импорта:
#import <Accelerate/Accelerate.h>
И тогда я строю свой проект и получаю 4 ошибки в файле clapack.h
файл из vecLib.framework
указывая на эти строки:
int claswp_(__CLPK_integer *n, __CLPK_complex *a, __CLPK_integer *lda, __CLPK_integer *
k1, __CLPK_integer *k2, __CLPK_integer *ipiv, __CLPK_integer *incx) __OSX_AVAILABLE_STARTING(__MAC_10_2,__IPHONE_4_0);
int dlaswp_(__CLPK_integer *n, __CLPK_doublereal *a, __CLPK_integer *lda, __CLPK_integer
*k1, __CLPK_integer *k2, __CLPK_integer *ipiv, __CLPK_integer *incx) __OSX_AVAILABLE_STARTING(__MAC_10_2,__IPHONE_4_0);
int slaswp_(__CLPK_integer *n, __CLPK_real *a, __CLPK_integer *lda, __CLPK_integer *k1,
__CLPK_integer *k2, __CLPK_integer *ipiv, __CLPK_integer *incx) __OSX_AVAILABLE_STARTING(__MAC_10_2,__IPHONE_4_0);
int zlaswp_(__CLPK_integer *n, __CLPK_doublecomplex *a, __CLPK_integer *lda,
__CLPK_integer *k1, __CLPK_integer *k2, __CLPK_integer *ipiv, __CLPK_integer *incx) __OSX_AVAILABLE_STARTING(__MAC_10_2,__IPHONE_4_0);
Все эти ошибки показывают отсутствие ожидаемой закрывающей скобки ')' в k1
, Странно, что я вообще не получаю этих ошибок ни в каких других проектах. В чем может быть причина этой ошибки? Буду очень признателен, если кто-то может предложить решение для этого.
2 ответа
Ваш код (или один из заголовков, которые вы включили ранее <Accelerate/Accelerate.h>
) определяет макрос с именем k1
, Что-то вроде:
#define k1 *some expression*
Это ошибка для системной библиотеки, использующая "общие" имена параметров, подобные этой, именно по этой причине, но это также плохой стиль для вас использовать их как имена макросов по той же причине.
Есть несколько способов решить проблему:
- Измените имя вашего макроса.
- Переместите определение вашего макроса так, чтобы оно появилось после включения заголовка Accelerate.
Если вы не используете функции LAPACK, а используете какую-то другую часть Accelerate, вы можете запретить компилятору видеть прототипы clapack.h через злоупотребление include-guard:
#define __CLAPACK_H // hide clapack.h prototypes #import <Accelerate/Accelerate.h>
Пожалуйста, перейдите по этой ссылке: https://github.com/aosm/xnu/blob/master/EXTERNAL_HEADERS/Availability.h
The desktop Mac OS X and iOS each have different version numbers.
The __OSX_AVAILABLE_STARTING() macro allows you to specify both the desktop
and iOS version numbers. For instance:
__OSX_AVAILABLE_STARTING(__MAC_10_2,__IPHONE_2_0)
means the function/method was first available on Mac OS X 10.2 on the desktop
and first available in iOS 2.0 on the iPhone.
If a function is available on one platform, but not the other a _NA (not
applicable) parameter is used. For instance:
__OSX_AVAILABLE_STARTING(__MAC_10_3,__IPHONE_NA)
means that the function/method was first available on Mac OS X 10.3, and it
currently not implemented on the iPhone.
At some point, a function/method may be deprecated. That means Apple
recommends applications stop using the function, either because there is a
better replacement or the functionality is being phased out. Deprecated
functions/methods can be tagged with a __OSX_AVAILABLE_BUT_DEPRECATED()
macro which specifies the OS version where the function became available
as well as the OS version in which it became deprecated. For instance:
__OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0,__MAC_10_5,__IPHONE_NA,__IPHONE_NA)
means that the function/method was introduced in Mac OS X 10.0, then
устарело начало в Mac OS X 10.5. На iOS эта функция никогда не была доступна.