编译CBLAS供ghostjat/np使用时make执行失败的问题求助
编译CBLAS共享库用于PHP矩阵运算的问题
我正在尝试构建BLAS共享库,用于ghostjat/np的PHP矩阵运算,但编译CBLAS源码时一直遇到问题,环境为Ubuntu 20工作站,操作步骤如下:
# 创建目录 mkdir ~/blas cd ~/blas # 下载并解压CBLAS源码 wget http://www.netlib.org/blas/blast-forum/cblas.tgz tar -xvzf cblas.tgz # 进入CBLAS目录 cd CBLAS # 按照README替换Makefile rm Makefile.in ln -s Makefile.LINUX Makefile.in # 执行编译 make
第一次执行make时,因缺少gfortran报错:
gfortran -O3 -c sdotsub.f make[1]: gfortran: Command not found make[1]: *** [Makefile:247: sdotsub.o] Error 127 make[1]: Leaving directory '/home/foo/biz/machine-learning/blas/CBLAS/src' make: *** [Makefile:147: allprecision] Error 2
安装gfortran后:
sudo apt install gfortran
再次执行make,能编译大部分内容,但仍报错:
make[1]: Entering directory '/home/foo/biz/machine-learning/blas/CBLAS/testing' gcc -I../include -O3 -DADD_ -c c_sblas1.c gfortran -O3 -c c_sblat1.f c_sblat1.f:214:48: 214 | CALL STEST1(SNRM2TEST(N,SX,INCX),STEMP,STEMP,SFAC) | 1 Warning: Rank mismatch in argument ‘strue1’ at (1) (scalar and rank-1) [-Wargument-mismatch] c_sblat1.f:218:48: 218 | CALL STEST1(SASUMTEST(N,SX,INCX),STEMP,STEMP,SFAC) | 1 Warning: Rank mismatch in argument ‘strue1’ at (1) (scalar and rank-1) [-Wargument-mismatch] gfortran -o xscblat1 c_sblat1.o c_sblas1.o ../lib/cblas_LINUX.a libblas.a gfortran: error: libblas.a: No such file or directory make[1]: *** [Makefile:72: xscblat1] Error 1 make[1]: Leaving directory '/home/foo/biz/machine-learning/blas/CBLAS/testing' make: *** [Makefile:180: alltst] Error 2
我的需求是生成类似cblas.so的共享库用于PHP脚本,但编译后找不到.so文件,也不清楚应该生成哪些文件。
补充尝试
- 有人建议安装BLAS或libopenblas-dev,但我的目标是得到可随PHP源码分发的库,因此希望通过编译CBLAS实现。
- 我意识到CBLAS只是BLAS的C包装器,需要依赖BLAS静态库。于是编译BLAS 3.11.0得到
blas_LINUX.a,路径为/Users/foo/Desktop/biz/machine-learning/blas2/BLAS-3.11.0/blas_LINUX.a,并修改CBLAS的Makefile.in中的BLLIB配置:
原内容:
修改后:BLLIB = libblas.a
执行BLLIB = /Users/foo/Desktop/biz/machine-learning/blas2/BLAS-3.11.0/blas_LINUX.amake clean all后,测试阶段仍报错:( cd testing && make all ) gcc -I../include -O3 -DADD_ -c c_sblas1.c gfortran -O3 -c c_sblat1.f c_sblat1.f:214:48: 214 | CALL STEST1(SNRM2TEST(N,SX,INCX),STEMP,STEMP,SFAC) | 1 Error: Rank mismatch in argument 'strue1' at (1) (scalar and rank-1) c_sblat1.f:218:48: 218 | CALL STEST1(SASUMTEST(N,SX,INCX),STEMP,STEMP,SFAC) | 1 Error: Rank mismatch in argument 'strue1' at (1) (scalar and rank-1) make[1]: *** [c_sblat1.o] Error 1 make: *** [alltst] Error 2
希望能得到帮助完成编译,生成可用的共享库。
内容的提问来源于stack exchange,提问作者S. Imp
相关产品推荐
相关产品推荐

