6

问题

我试图从 raku调用GSL中 chisq 函数的累积分布函数。

这是我的乐脚本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/libecho $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/libLD_LIBRARY_PATHwith 命令export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib并尝试再次运行该脚本。

仍然无法正常工作,同样的错误信息。

环境:

我正在rstudio 内的 docker 容器中运行代码。

乐版 2019.11

它有gsl-dev文件和gsl库。libgsl.so容器内部有共享库/usr/lib/x86_64-linux-gnu/。此文件夹内的其他共享库是 在此处输入图像描述

有没有办法让它工作?

4

2 回答 2

3

我验证了 Ubuntu 18.04 附带的 libgsl 和 libgslcblas 版本会产生您发现的错误。我安装了这两个库的 Debian Buster 版本(即使这不是好的做法),并且奇迹般地解决了这个问题。

于 2019-12-21T13:31:20.740 回答
2

看起来基本图像rocker/rstudio已更新为debian:buster.

安装后libgsl23,问题解决。

它现在有效!

于 2019-12-28T06:36:58.120 回答