2011-05-06 95 views
3

在过去一周中,我一直在建立一个由独立第三方生成的文件的大规模静态库(> 1000个C文件)。需要在Xcode中加入框架加速框架

目前,我编程的应用程序将有一些激烈的计算,看来我需要添加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) 
+0

可以粘贴在你的问题中的错误消息 – Robin 2011-05-06 04:53:23

+1

您需要添加加速框架,你需要'#import'相应的(伞)的头文件。既然你已经这样做了,并且你得到了重新声明/相冲突的类型错误,它看起来像你的源文件也包含另一个(C)LAPACK实现的头文件。看看你是否可以发现这些,并删除它们(不要忘记先备份你的项目,或使用版本控制系统)。 – 2011-05-06 04:57:25

+0

@Bavarious:更多的代码阅读,我发现了一个引用mkl_lapack.h和mkl_cblas.h的头文件。代码似乎与这种方法交织在一起。无论如何,我可以对编译器说谎,并让它相信Apple的Lapack同样好? – Rasman 2011-05-06 13:59:07

回答

3

所以在阅读了一些文档之后,我不需要添加包含统计信息说:只要在项目中有框架就足够了。

问题是,苹果的LAPACK不识别_dgetrf,而是它正在寻找dgetrf_。还有一切都必须通过引用传递。

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