использование библиотек levmar в MacOS Mojave 10.14.2 приводит к ошибке компиляции - PullRequest
0 голосов
/ 05 января 2019

Я хотел бы использовать библиотеки levmar на MacOS X Mojave. Чтобы скомпилировать библиотеки, мне пришлось сначала скомпилировать библиотеки f2c, которые идут без ошибок, а затем использовать их для компиляции библиотек levmar через cmake. Все они компилируются без ошибок, а также создается демонстрационная демонстрационная программа 'lmdemo'. Однако, когда я пытаюсь скомпилировать пример expfit.c (который идет с загрузкой levmar), используя g ++, я получаю ошибку:

Неопределенные символы для архитектуры x86_64: " dgemm ", ссылка от: _dlevmar_trans_mat_mat_mult в liblevmar.a (misc.c.o) " dgeqrf ", на который ссылается: _dAx_eq_b_QR в liblevmar.a (Axb.c.o) _dAx_eq_b_QRLS в liblevmar.a (Axb.c.o) " dgesvd ", на который ссылается: _dAx_eq_b_SVD в liblevmar.a (Axb.c.o) _dlevmar_pseudoinverse в liblevmar.a (misc.c.o) " dgetrf ", на который ссылаются: _dAx_eq_b_LU в liblevmar.a (Axb.c.o) " dgetrs ", на который ссылаются: _dAx_eq_b_LU в liblevmar.a (Axb.c.o) " dorgqr ", на который ссылаются: _dAx_eq_b_QR в liblevmar.a (Axb.c.o) " dpotf2 ", на который ссылается: _dlevmar_chol в liblevmar.a (misc.c.o) " dpotrf ", на который ссылаются: _dAx_eq_b_Chol в liblevmar.a (Axb.c.o) " dpotrs ", на который ссылаются: _dAx_eq_b_Chol в liblevmar.a (Axb.c.o) " dsytrf ", на который ссылаются: _dAx_eq_b_BK в liblevmar.a (Axb.c.o) " dsytrs ", на который ссылаются: _dAx_eq_b_BK в liblevmar.a (Axb.c.o) " dtrtrs ", на который ссылаются: _dAx_eq_b_QR в liblevmar.a (Axb.c.o) _dAx_eq_b_QRLS в liblevmar.a (Axb.c.o) " sgemm ", на который ссылаются: _slevmar_trans_mat_mat_mult в liblevmar.a (misc.c.o) " sgeqrf ", на который ссылается: _sAx_eq_b_QR в liblevmar.a (Axb.c.o) _sAx_eq_b_QRLS в liblevmar.a (Axb.c.o) " sgesvd ", на который ссылается: _sAx_eq_b_SVD в liblevmar.a (Axb.c.o) _slevmar_pseudoinverse в liblevmar.a (misc.c.o) " sgetrf ", на который ссылаются: _sAx_eq_b_LU в liblevmar.a (Axb.c.o) " sgetrs ", на который ссылаются: _sAx_eq_b_LU в liblevmar.a (Axb.c.o) " sorgqr ", на который ссылаются: _sAx_eq_b_QR в liblevmar.a (Axb.c.o) " spotf2 ", на который ссылается: _slevmar_chol в liblevmar.a (misc.c.o) " spotrf ", на который ссылаются: _sAx_eq_b_Chol в liblevmar.a (Axb.c.o) " spotrs ", на который ссылаются: _sAx_eq_b_Chol в liblevmar.a (Axb.c.o) " ssytrf ", на который ссылаются: _sAx_eq_b_BK в liblevmar.a (Axb.c.o) " ssytrs ", на который ссылаются: _sAx_eq_b_BK в liblevmar.a (Axb.c.o) " strtrs ", на который ссылаются: _sAx_eq_b_QR в liblevmar.a (Axb.c.o) _sAx_eq_b_QRLS в liblevmar.a (Axb.c.o) ld: символ (ы) не найден для архитектуры x86_64 clang: error: сбой команды компоновщика при выходе код 1 (используйте -v для просмотра вызова)

Кажется, это происходит из рутины BLAS / LAPACK, не так ли? Почему пример 'lmdemo' работает хорошо?

g ++ компилятор дает этот результат для опции -v:

Настраивается с: --prefix = / Приложения / Xcode.app / Содержание / Разработчик / usr --with-gxx-include-dir = / Приложения / Xcode.app / Содержание / Разработчик / Платформы / MacOSX.platform / Разработчик / SDKs / MacOSX10.14 .sdk / USR / включать / C ++ / 4.2.1 Apple LLVM версия 10.0.0 (clang-1000.11.45.5) Цель: x86_64-apple-darwin18.2.0 Модель потока: posix Установленный каталог: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

Google решает проблему и использует решение xcode-select --install не решает проблему.

Может кто-нибудь помочь мне, пожалуйста? Спасибо Z

1 Ответ

0 голосов
/ 06 января 2019

Хорошо, похоже, что при компиляции недостаточно связать библиотеки levmar (-llevmar), а также библиотеки BLAS и LAPACK (-lblas -llapack). После добавления этих ссылок пример expfit.c компилируется и запускается как задумано. Я не уверен, что понимаю это, так как программа expfit.c не использует напрямую подпрограммы blas или lapack, только levmar. Означает ли это, что levmar был скомпилирован без блэса или lapack? Хммм ...

...