3

この 1 週間、独立したサードパーティによって生成されたファイルを使用して、大規模な静的ライブラリ (1000 以上の C ファイル) を構築してきました。

現在、私はいくつかの激しい計算を行うアプリをプログラミングしており、CLAPACK ライブラリを追加する必要があるようです。私は加速フレームワークが進むべき道だと信じていますが、私はそれを動作させることができないようです:

フレームワークがないと、cblas_zgemm と dgetrf が不足していることを示すリンカー エラーが多数表示されます (合計で 12 以上のエラーが 30 個のファイルに分散しています)。

フレームワークをプロジェクトに追加した後、コードを 1 イオタ変更せずに、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)
4

1 に答える 1

3

そのため、いくつかのドキュメントを読んだ後、include ステートメントを追加する必要はありません。プロジェクトにフレームワークがあれば十分です。

問題は、Apple の LAPACK が を認識せず_dgetrf、探していることですdgetrf_。また、すべてを参照渡しする必要があります。

ドキュメントはここにあります: ベクトル ライブラリ

于 2011-05-06T18:25:56.773 に答える