iOS - 解析加速框架时出错

huo*_*ong 1 import ios accelerate-framework

我有这个非常奇怪的问题,只在我的项目中.我正在使用XCode 4.3.6并尝试将Accelerating Framework添加到我的项目中.所以在我的文件中我只是做一个简单的import语句:

#import <Accelerate/Accelerate.h>
Run Code Online (Sandbox Code Playgroud)

然后我构建我的项目并在指向这些行的文件clapack.h文件中获得4个错误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);
Run Code Online (Sandbox Code Playgroud)

所有这些错误都显示出错过预期的结束括号')' k1.奇怪的是,我根本没有在任何其他项目中得到这些错误.这个错误的原因是什么?如果有人能为此提出解决方案,我会非常感激.

Ste*_*non 5

您的代码(或之前包含的标题之一<Accelerate/Accelerate.h>)定义了一个带有名称的宏k1.就像是:

#define k1 *some expression*
Run Code Online (Sandbox Code Playgroud)

系统库使用像这样的"常见"参数名称的错误就是出于这个原因,但出于同样的原因,将它们用作宏名称也是一种不好的风格.

您可以通过以下几种方法解决此问题:

  1. 更改宏的名称.
  2. 移动宏的定义,使其包含Accelerate标头后出现.
  3. 如果您没有使用LAPACK函数,而是使用Accelerate的其他部分,则可以阻止编译器通过include-guard滥用来查看clapack.h原型:

     #define __CLAPACK_H // hide clapack.h prototypes
     #import <Accelerate/Accelerate.h>
    
    Run Code Online (Sandbox Code Playgroud)