В программе нужно считать ранги матриц. причем неквадратных. для этих целей был установлен из портов lapack и из исходников PDL:LinearAlgebra.
был создан для проверки файл:
localhost% cat linal.pl
#!/usr/local/bin/perluse PDL;
use PDL::LinearAlgebra;
$a = random (100,100);
$b = mrank($a,1e-5);который при вызове выдает ошибку.
localhost% ./linal.pl
/libexec/ld-elf.so.1: /usr/local/lib/perl5/site_perl/5.8.8/mach/auto/PDL/LinearAlgebra/Real/Real.so: Undefined symbol "dgesdd_"хотя вот это тоже верно:
localhost% strings /usr/local/lib/perl5/site_perl/5.8.8/mach/auto/PDL/LinearAlgebra/Real/Real.so | grep dgesdd
dgesdd_очень прошу помочь.
>хотя вот это тоже верно:
>
>localhost% strings /usr/local/lib/perl5/site_perl/5.8.8/mach/auto/PDL/LinearAlgebra/Real/Real.so | grep dgesdd
>dgesdd_
>
Это ничего не доказывает. В таких случаях надо делать
localhost% nm /usr/local/lib/perl5/site_perl/5.8.8/mach/auto/PDL/LinearAlgebra/Real/Real.so | grep dgesddи тут вы увидите, что символ dgesdd_ помечен, как не определенный.
А dgesdd_ -- это символ из LAPACK'а
Так что, если у вас LAPACK не установлен, то установите его, и убедитесь, что его библиотеки лежат в директориях видных линкеру ( /etc/ld.so.conf ), или, если установили в какое-то свое место, то установите переменную окружения
export LD_LIBRARY_PATH=/path_to_lapack_installation/lib/
>и тут вы увидите, что символ dgesdd_ помечен, как не определенный.
верно, именно так.
>
>А dgesdd_ -- это символ из LAPACK'а
>Так что, если у вас LAPACK не установлен, то установите его, и
>убедитесь, что его библиотеки лежат в директориях видных линкеру ( /etc/ld.so.conf
>), или, если установили в какое-то свое место, то установите переменную
>окружения
>export LD_LIBRARY_PATH=/path_to_lapack_installation/lib/
localhost% ls /usr/local/lib | grep lapack
liblapack.a
liblapack.so
liblapack.so.3
liblapack_p.alocalhost% cat /usr/compat/linux/etc/ld.so.conf
/lib
/usr/lib
/usr/local/lib
/usr/X11R6/libтак что неясно, чего не хватает. lapack был установлен и ранее, а вот ld.so.conf я правил уже по вашему совету. даже PDL:LinAlg потом пересобрал. и переменную тоже пробовал ставить. результат старый.
файла /etc/ld.so.conf у меня почему-то не было. но даже после того, как он был создан с содержимым описанным выше, ничего не изменилось.