需要在Xcode中包含Accelerate框架

时间:2011-05-06 04:45:38

标签: objective-c xcode ios frameworks lapack

在过去的一周里,我一直在构建一个包含由独立第三方生成的文件的大型静态库(> 1000 C文件)。

目前,我正在编写一个具有一些密集计算的应用程序,看来我需要添加CLAPACK库。我相信加速框架是可行的方法,但我似乎无法让它表现出来:

没有框架我有一堆链接器错误告诉我我缺少了,其中包括cblas_zgemm和dgetrf(共有30多个文件共有十几个)。

在我将框架添加到项目并且不更改我的代码iota之后,cblas_zgemm链接器错误消失了,但dgetrf仍然存在(尽管属于框架)。

如果我添加#include (or #import) <Accelerate/Accelerate.h>,我会得到超过1000个链接器错误,告诉我我正在重新声明一堆枚举器(例如CblasTrans)并且xyz存在冲突类型...错误消息似乎重复自己,同时dgetrf仍未定义。

我做错了什么/我错过了什么?

感谢

编辑: 添加之后的完整错误消息:

/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/Headers/cblas.h:12: error: redeclaration of enumerator 'CblasLower'


/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/Headers/cblas.h:182: error: conflicting types for 'cblas_sgemv'

编辑2: 之后的原始链接器错误我添加了框架:

"_dgetrf", referenced from:
      _aaConditionNumber in libccodeLab.a(condNumber.o)
      _aaInvMatrixLUDri in libccodeLab.a(invMtrxLUDri.o)
      _aaLUFactorEx in libccodeLab.a(LU.o)
  "_dgetri", referenced from:
      _aaConditionNumber in libccodeLab.a(condNumber.o)
      _aaInvMatrixLUDri in libccodeLab.a(invMtrxLUDri.o)
      _aaLUInvMatrix in libccodeLab.a(LUInvMtrx.o)
  "_zgesdd", referenced from:
      _aaCxSVD in libccodeLab.a(cxSVD.o)
  "_dgeev", referenced from:
      _aaGenEigenValueVector in libccodeLab.a(eigenV.o)
  "_dpotrf", referenced from:
      _aaInvMatrixChoDri in libccodeLab.a(invMtrxChoDri.o)
  "_dpotri", referenced from:
      _aaInvMatrixChoDri in libccodeLab.a(invMtrxChoDri.o)
  "_dtrtri", referenced from:
      _aaInvMatrixTriDri in libccodeLab.a(invMtrxTriDri.o)
  "_dgelqf", referenced from:
      _aaQRWithoutPivot in libccodeLab.a(QRWithoutPivot.o)
  "_dorglq", referenced from:
      _aaQRWithoutPivot in libccodeLab.a(QRWithoutPivot.o)
  "_dgesdd", referenced from:
      _aaSVDS in libccodeLab.a(SVDS.o)
      _aaSVD in libccodeLab.a(SVD.o)
  "_dsyevd", referenced from:
      _aaSymEigenValueVector in libccodeLab.a(symEigenV.o)

1 个答案:

答案 0 :(得分:3)

所以在阅读了一些文档后,我不需要添加一个include语句:只需在项目中使用框架即可。

问题在于Apple的LAPACK无法识别_dgetrf,而是在寻找dgetrf_。所有内容都必须通过引用传递。

文档可以在这里找到: Vector Libraries