docker - 在 Raku 中通过 NativeCall 调用 GSL 函数会引发错误

标签 docker lapack gsl raku nativecall

问题

我正在尝试调用 cumulative distribution function of chisq functionGSL来自乐。

这是我的 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。 该文件夹中的其他共享库是 enter image description here

有办法让它发挥作用吗?

最佳答案

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

关于docker - 在 Raku 中通过 NativeCall 调用 GSL 函数会引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59291004/

相关文章:

c++ - 分段故障

c++ - 需要使用 gsl LU 分解获取方阵逆矩阵的示例代码

python - 在 Cython 中使用 LAPACK 包装器估计行列式进行 LU 分解

python - 两个巨大稠密矩阵的乘法 Hadamard-乘以一个稀疏矩阵

c++ - Xcode 4 警告 : "could not find object file"

Dockerfile:如何使用 curl 下载文件并复制到容器中

c - 在 Mac OS 上为 C 安装 LAPACK 和 BLAS 库

docker - CI和CD实现问题

docker - 所有 docker swarm 实例都可以在同一台机器上运行吗?

docker - 使用docker daemon连接到Kubernetes kops pod