在过去的一周中,我一直在构建一个庞大的静态库(>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)