lapacke.h in CentOS 5



我正在尝试创建一个使用BLAS和LAPACK C扩展的Python轮子。在Ubuntu下编译这样的包需要以下系统包:

  • libopenblas-dev:(开放(BLAS开发库
  • liblapack-dev:LAPACK开发库
  • LAPACK的liblapacke-dev:C标头

这很好用,但现在我需要在Centos5下重复这个过程。原因是我正在尝试创建一个manylinux轮子,推荐的方法似乎是使用一个旧的CentOS工具链来保证它在不同的linux发行版下工作。

问题是,虽然libopenblas-devliblapack-dev在Centos5中具有等效性(openblas-devellapack-devel(,但liblapacke-dev没有等效的包。考虑到这些包中提供的LAPACK版本非常旧(3.0(,似乎不支持lapacke,这是有道理的。但正因为如此,我无法编译我的软件,因为gcc抱怨缺少lapacke.h头文件。

我尝试过的东西:

  • 手动下载并编译更新的LAPACK版本(3.8.0和3.6.0(。我收到编译错误
  • 直接将上面某个LAPACK版本中的lapacke.h标头复制到/usr/include。不起作用,可能是因为LAPACK版本的差异
  • 按照官方说明添加"英特尔MKL"存储库,并用MKL替换BLAS/LAPACK。不幸的是,CentOS 5在yum-config-manager中没有包含--add-repo选项,所以我在这里有点不知所措

lapacke在CentOS 5.0中不受支持,因此C接口不可用,但您仍然可以通过调用fortran符号来完成此操作。

首先,安装BLAS和LAPACK 的CentOS软件包

yum install -y blas-devel lapack-devel

并将这些库添加到链接器路径

export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/lib64"

现在,通过导入fortran符号,您应该能够在C/C++扩展代码中使用BLAS和LAPACK函数。例如,要在C++源中使用LAPACK函数dpttrs,您需要将其声明为外部C符号

extern "C" {
void dpttrs_(lapack_int* n, lapack_int* nrhs, const double* d, const double* e, 
double* b, lapack_int* ldb, lapack_int *info );
}

然后通过调用CCD_ 12函数可以正常使用。

最后,在绑定python包时,请确保包括blaslapack库和头。例如,当使用cffi时,您应该按照以下模式配置源

ffi.set_source(
'YOUR MODULE NAME',
"BASE SOURCES",
sources=sources,
source_extension='.cpp',
libraries=['blas', 'lapack'],
include_dirs=['/usr/include']
)

相关内容

  • 没有找到相关文章

最新更新