2011-05-06 69 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