Проблема состоит вот в чем. Нужно написать небольшую программу для численного решения уравнения квантовой механики (найти собственные функции и собственные вектора по сути). Известно, что в пакете LAPACK есть функция DSTEVX, которая все это делает.
Версия для языка С называется clapack. Изначально библиотека писалась на фортран, но со временем ее перенесли и на С. Из-за недостатка времени я нашел готовые собранные библиотеки liblapack.a, libblas.a, libF77.a, libI77.a, нужные заголовочные файлы blawswrap.h и f2c.h. Собственно ,я руководствовался hep.ph.liv.ac.uk/~hock/My_reports/CLAPACK/CLAPACK%20INSTALLING,%20USING.htm, взял оттуда ссылку на порт компилятора gcc под Windows (работаю под этой ОС).
Мне удалось скомпилировать тестовый пример автора статьи, значения совпали с ожидаемыми. Но в моей программе я столкнулся с ошибкой:
Код: Выделить всё
bash$ gcc -o num.exe num.cpp -L. -llapack -lblas -lF77 -lI77
./liblapack.a(dstevx.o):dstevx.c:(.text+0x2d0): undefined reference to `sqrt(double)`
а также на ряд других функции типа log и cos
collect2: ld returned 1 exit statusВ моей программе включены заголовки #include <math.h>, #include "blaswrap.h", #include "f2c.h". Добавлять -lm при компиляции не помогает. Как я понимаю, компилятор видит требуемую функцию в библиотеке, я написал
Код: Выделить всё
extern int dstevx_(char *, char *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, integer *,
integer *, doublereal *, integer *, doublereal *, doublereal *, integer *, doublereal *, integer *, integer *, integer *);Проблемы совместимости типов не проявляются.
В исходниках библиотек я действительно нашел вызовы sqrt.
Самым неприятным вариантом видится пересборка всей библиотеки, т.к. не имею такого опыта.
Заранее спасибо.