Проблема с библиотекой clapack

Модератор: Модераторы разделов

LeonSabr
Сообщения: 3

Проблема с библиотекой clapack

Сообщение LeonSabr »

Доброе время суток!

Проблема состоит вот в чем. Нужно написать небольшую программу для численного решения уравнения квантовой механики (найти собственные функции и собственные вектора по сути). Известно, что в пакете 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.
Самым неприятным вариантом видится пересборка всей библиотеки, т.к. не имею такого опыта.
Заранее спасибо.
Спасибо сказали:
Аватара пользователя
Mage-Warrior
Сообщения: 869
Статус: Семь раз понюхай, один раз откуси!
ОС: SlackWare 12.1

Re: Проблема с библиотекой clapack

Сообщение Mage-Warrior »

А если так?

Код: Выделить всё

gcc -o num.exe num.cpp -L. -llapack -lblas -lF77 -lI77 -lm
*- Большинство проблем, дружок, завсегда покажет лог! -*
Спасибо сказали:
LeonSabr
Сообщения: 3

Re: Проблема с библиотекой clapack

Сообщение LeonSabr »

Пробовал, результат тот же.
Спасибо сказали:
Аватара пользователя
Mage-Warrior
Сообщения: 869
Статус: Семь раз понюхай, один раз откуси!
ОС: SlackWare 12.1

Re: Проблема с библиотекой clapack

Сообщение Mage-Warrior »

LeonSabr писал(а):
18.03.2009 13:54
Пробовал, результат тот же.


А что вернет следующая команда?

Код: Выделить всё

$ ld -lm

------------- Добавлено ------------
Вот здесь что-то есть (вряд ли поможет).
Вероятнее всего, причина в том, что вы нашли уже собранные библиотеки lapack, которые собирались при иной, сильно отличающейся libm.so*
Так что качайте исходники и собирайте.
*- Большинство проблем, дружок, завсегда покажет лог! -*
Спасибо сказали:
LeonSabr
Сообщения: 3

Re: Проблема с библиотекой clapack

Сообщение LeonSabr »

Форум по ссылке уже изучал, решения не нашел.

Вот что мне удалось выяснить. Автор библиотек (как я писал, я взял уже готовые) столкнулся с проблемой, специфичной для конкретного компилятора gcc:

The functions in .\CLAPACK\SRC often define a prototype even for standard maths functions like sqrt, log, etc.
g++ is not happy with this, so I had to remove all by hand. The line #include "math.h" must also be added to the top of the corresponding file.
I do it one by one as the link command gives an error message.

Я понял это так. В исходниках библиотек определяются стандартные математические функции, например sqrt, log, и я нашел это место:

Код: Выделить всё

/* Builtin functions */
    double sqrt(doublereal);

Компилятор на это ругался и автор удалял эти объявления. Я не понял, он их удалял из исходников еще до сборки библиотеки? То есть, как он пишет, одну за одной, пока линкер не дал добро и библиотека не собралась? Но в таком случае он пропустил некоторые функции, так как нужная мне функция ругается на подобное определение. И это значит, что мне придется пересобирать библиотеку, не могу же я поправить готовую.

Если я что-то не так понял с анлийского. может кто-то сможет объяснить?
Спасибо сказали:
Аватара пользователя
Mage-Warrior
Сообщения: 869
Статус: Семь раз понюхай, один раз откуси!
ОС: SlackWare 12.1

Re: Проблема с библиотекой clapack

Сообщение Mage-Warrior »

Да, по сути, автор убрал объявления всех прототипов в исходниках, сделав include для использования стандартных функций. НО... предыдущие объявления, скорее всего, отличались (типами параметров, например) от объявления стандартных функций (и вызовы - соответственно). Поэтому, я полагаю, что Вам все же будет нужно банально скачать и попробовать собрать из исходников.
*- Большинство проблем, дружок, завсегда покажет лог! -*
Спасибо сказали: