Необходимо включить ускорение фреймворка в Xcode - PullRequest
3 голосов
/ 06 мая 2011

На прошлой неделе я создавал огромную статическую библиотеку (> 1000 файлов C) с файлами, которые были сгенерированы независимой третьей стороной.

В настоящее время я программирую приложение, которое будет иметь некоторые интенсивные вычисления, и кажется, что мне нужно добавить библиотеку CLAPACK. Я считаю, что фреймворк Acceleration - это путь, но я просто не могу заставить его вести себя:

без фреймворка У меня есть куча ошибок компоновщика, говорящих мне, что я скучаю, среди прочего, cblas_zgemm и dgetrf (их более десятка в общем разбросано по 30 файлам).

после добавления фреймворка в проект и без изменения кода на йоту ошибка компоновщика 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 Ответ

3 голосов
/ 06 мая 2011

поэтому после прочтения некоторых документов мне не нужно добавлять оператор включения: достаточно просто иметь каркас в проекте.

Проблема в том, что Apple LAPACK не распознает _dgetrf, а ищет dgetrf_. Также все должно быть передано по ссылке.

документацию можно найти здесь: Векторные библиотеки

...