我正在尝试从Raku致电cumulative distribution function of chisq function中的GSL。
这是我的raku脚本chisq.raku
#Calling gsl_cdf_chisq-P function in GSL from raku
use NativeCall;
sub gsl_cdf_chisq_P(num64, num64) returns num64 is native('gsl') { * };
sub gsl_cdf_chisq_Q(num64, num64) returns num64 is native('gsl') { * };
sub pchisq($q, $df, $lower-tail = True) {
my $a = $q.Num;
my $b = $df.Num;
if $lower-tail == True {
return gsl_cdf_chisq_P($a, $b)
} else {
return gsl_cdf_chisq_Q($a, $b)
}
}
say pchisq(3,4);
在执行此脚本时,出现以下错误:
Cannot locate native library '(null)': /usr/lib/x86_64-linux-gnu/libgsl.so: undefined symbol: cblas_ctrmv
in method setup at /usr/share/perl6/core/sources/947BDAB9F96E0E5FCCB383124F923A6BF6F8D76B (NativeCall) line 286
in block gsl_cdf_chisq_P at /usr/share/perl6/core/sources/947BDAB9F96E0E5FCCB383124F923A6BF6F8D76B (NativeCall) line 578
in sub pchisq at chisq.raku line 13
in block <unit> at chisq.raku line 19
通过阅读NativeCall上的文档,我将包括共享库libgsl.so
。
Google搜索显示cblas_ctrmv
可能(不确定)与lapack相关。
因此,我搜索了liblapack.so
中确实存在的/usr/lib
。
echo $LD_LIBRARY_PATH
显示了
/usr/local/lib/R/lib::/lib:/usr/local/lib:/usr/lib/x86_64-linux-gnu:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server
要查看是否可以解决该问题,我使用命令/usr/lib
向LD_LIBRARY_PATH
添加了export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib
并尝试再次运行该脚本。
仍然无法正常工作,出现相同的错误消息。
我正在docker container inside rstudio中运行代码。
Raku版本2019.11
它具有gsl-dev
个文件和gsl
库。
容器在libgsl.so
内部具有共享库/usr/lib/x86_64-linux-gnu/
。
此文件夹中的其他共享库是
有办法使它正常工作吗?
答案 0 :(得分:3)
我验证了Ubuntu 18.04随附的libgsl和libgslcblas版本会产生您发现的那种错误。 我安装了两个库的Debian Buster版本(即使不是很好的做法),也奇迹般地解决了这个问题。
答案 1 :(得分:2)
好像rocker/rstudio
的基本图像已更新为debian:buster
。
安装libgsl23
后,问题已解决。
现在可以使用!!