Старый lapack .dylib подключается вместо текущей версии - PullRequest
0 голосов
/ 31 октября 2018

Я использую Lapack в точной программе диагонализации.

Использование otool -L V3.e Мне сказали, что я связан с библиотекой "/opt/local/lob/lapack/liblapack.3.dylib". В том же каталоге находится библиотека "liblapack.3.8.0.dylib". Здесь подразумевается, что последняя является новой версией лапака и поэтому желательна.

Я не могу понять, как связать одно с другим. Мои текущие флаги компилятора для ссылки на эту библиотеку:

-0fast -I$(DIR) -L$(DIR) -llapack

Где $(DIR) - каталог, показанный выше.

У меня нет разрешения администратора, но я могу легко спросить человека, ответственного за MacPorts. Поэтому, если удастся удалить одну из этих библиотек, я смогу это осуществить.

РЕДАКТИРОВАТЬ : В ответ Гевин Портвуд.

... -L$(DIR) -llapack3.8

Для этого все файлы модуля скомпилированы хорошо, но компоновщик завершился со следующей ошибкой:

ld: library not found for -llapack3.8
collect2: error: ld returned 1 exit status
make: *** [V3] Error 1

Я попробовал вариант с 3.8.0 в конце вместо 3.8 и получил тот же результат.

... -L$(DIR) -l:liblapack.3.dylib

Немного смущен этим, так как я не хочу использовать эту библиотеку. Но с этим мне выдали ту же ошибку, что и выше. Если я изменю его на `l: liblapack.3.8.0.dylib ', я получу ту же ошибку.

... -L$(DIR) /opt/local/lob/lapack/liblapack.3.dylib

Последний не дал мне ошибку, но предупредил. Предупреждение следующее:

warning: /opt/local/lib/lapack/liblapack.3.8.0.dylib: linker input file unused because linking not done

Обратите внимание, что я исправил вашу опечатку. Кажется, что программа работала правильно, но когда я запустил otool -L <exe>, я ссылался на liblapack.3.dylib. Также мой компилятор gfortran.

EDIT2 : содержимое каталога / opt / local / lib / lapack /

cmake                   libcblas.3.dylib        liblapacke.3.8.0.dylib
libblas.3.8.0.dylib     libcblas.dylib          liblapacke.3.dylib
libblas.3.dylib         liblapack.3.8.0.dylib   liblapacke.dylib
libblas.dylib           liblapack.3.dylib       pkgconfig
libcblas.3.8.0.dylib    liblapack.dylib

EDITFINAL Оказывается, каталоги были мягко связаны. См. Комментарии к ответу Гэвина.

1 Ответ

0 голосов
/ 31 октября 2018

В зависимости от вашего компилятора и версии, ссылка с одним из следующих:

... -L$(DIR) -llapack3.8.0

... -L$(DIR) -l:liblapack.3.8.0.dylib

... -L$(DIR) /opt/local/lob/lapack/liblapack.3.8.0.dylib
...