问题
我正在尝试调用 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
。
谷歌搜索显示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
为了看看是否可以修复它,我使用命令 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib
将 /usr/lib
添加到 LD_LIBRARY_PATH
中code> 并尝试再次运行脚本。
仍然无法工作,同样的错误消息。
环境:
我正在 docker container inside rstudio 中运行代码.
Raku版本2019.11
它有 gsl-dev
文件和 gsl
库。
容器在 /usr/lib/x86_64-linux-gnu/
内有共享库 libgsl.so
。
该文件夹中的其他共享库是
有办法让它发挥作用吗?
最佳答案
我验证了 Ubuntu 18.04 附带的 libgsl 和 libgslcblas 版本会产生您发现的那种错误。 我安装了这两个库的 Debian Buster 版本(即使这不是一个好的做法),并且奇迹般地解决了问题。
关于docker - 在 Raku 中通过 NativeCall 调用 GSL 函数会引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59291004/