Справочная информация:
Я работаю над проектом, написанным на смеси C и Fortran 77, и теперь мне нужно связать библиотеки LAPACK / BLAS с проектом (все в среде Linux). Рассматриваемый LAPACK - версия 3.2.1 (включая BLAS) с netlib.org. Библиотеки были скомпилированы с использованием Makefile верхнего уровня (make lapacklib и make blaslib).
Проблема:
Во время связывания сообщения об ошибках утверждали, что некоторые (не все) BLAS-подпрограммы, вызванные из LAPACK-подпрограмм, не определены. Это вызвало у меня некоторую головную боль, но проблема была в конечном итоге решена, когда (в Makefile) был изменен порядок появления библиотек, которые будут связаны.
Код:
Далее (а) выдает ошибки, а (б) - нет. Связывание выполняется (c).
(a) LIBS = $ (LAPACK) /blas_LINUX.a $ (LAPACK) /lapack_LINUX.a
(b) LIBS = $ (LAPACK) /lapack_LINUX.a $ (LAPACK) /blas_LINUX.a
(c) gcc -Wall -O -o $ @ project.o project.a $ (LIBS)
Вопрос:
В чем может быть причина неопределенных ссылок только для некоторых подпрограмм и что делает порядок появления релевантным?