我正在尝试在 Ubuntu 上安装 CBLAS,据我所知,我按照文件夹中的 README 文件中的说明进行操作。当我执行“make all”时,我收到以下我无法理解的错误:
make[1]: Entering directory `/home/ubuntu/ernieProject_C/pascalInpaintCodes/CBLAS/t esting'
gfortran -o xscblat1 c_sblat1.o c_sblas1.o ../lib/cblas_LINUX.a ../lib/cblas_LINUX .a
../lib/cblas_LINUX.a(cblas_srotg.o): In function `cblas_srotg': cblas_srotg.c (.text+0x1): undefined reference to `srotg_'
../lib/cblas_LINUX.a(cblas_srot.o): In function `cblas_srot':cblas_srot.c:(.text+0x3b): undefined reference to `srot_'
../lib/cblas_LINUX.a(cblas_sswap.o): In function `cblas_sswap':cblas_sswap.c:(.text+0x21): undefined reference to `sswap_'
../lib/cblas_LINUX.a(cblas_sscal.o): In function `cblas_sscal':cblas_sscal.c:(.text+0x25): undefined reference to `sscal_'
../lib/cblas_LINUX.a(cblas_scopy.o): In function `cblas_scopy':cblas_scopy.c:(.text+0x21): undefined reference to `scopy_'
../lib/cblas_LINUX.a(cblas_saxpy.o): In function `cblas_saxpy':cblas_saxpy.c:(.text+0x2f): undefined reference to `saxpy_'
../lib/cblas_LINUX.a(sdotsub.o): In function `sdotsub_':sdotsub.f:(.text+0x7): undefined reference to `sdot_'
../lib/cblas_LINUX.a(snrm2sub.o): In function `snrm2sub_':snrm2sub.f:(.text+0x7): undefined reference to `snrm2_'
../lib/cblas_LINUX.a(sasumsub.o): In function `sasumsub_':sasumsub.f:(.text+0x7): undefined reference to `sasum_'
../lib/cblas_LINUX.a(isamaxsub.o): In function `isamaxsub_':isamaxsub.f:(.text+0x7): undefined reference to `isamax_'
../lib/cblas_LINUX.a(scasumsub.o): In function `scasumsub_':scasumsub.f:(.text+0x7): undefined reference to `scasum_'
../lib/cblas_LINUX.a(scnrm2sub.o): In function `scnrm2sub_':scnrm2sub.f:(.text+0x7): undefined reference to `scnrm2_'
collect2: ld returned 1 exit status
make[1]: *** [xscblat1] Error 1
make[1]: Leaving directory `/home/ubuntu/ernieProject_C/pascalInpaintCodes/CBLAS/te sting'
make: *** [alltst] Error 2
这是 Makefile.in。我根据说明对其进行了微小的修改。如下所示:
#
# Makefile.LINUX
#
#
# If you compile, change the name to Makefile.in.
#
#
#-----------------------------------------------------------------------------
# Shell
#-----------------------------------------------------------------------------
SHELL = /bin/sh
#-----------------------------------------------------------------------------
# Platform
#-----------------------------------------------------------------------------
PLAT = LINUX
#-----------------------------------------------------------------------------
# Libraries and includes
#-----------------------------------------------------------------------------
BLLIB = ../lib/cblas_LINUX.a
CBLIB = ../lib/cblas_$(PLAT).a
#-----------------------------------------------------------------------------
# Compilers
#-----------------------------------------------------------------------------
CC = gcc
FC = gfortran
LOADER = $(FC)
#-----------------------------------------------------------------------------
# Flags for Compilers
#-----------------------------------------------------------------------------
CFLAGS = -O3 -DADD_
FFLAGS = -O3
#-----------------------------------------------------------------------------
# Archive programs and flags
#-----------------------------------------------------------------------------
ARCH = ar
ARCHFLAGS = cr
RANLIB = ranlib
我在这里修改的行是
BLLIB = ../lib/cblas_LINUX.a
我只是更改了路径。现在 ../lib 中有一个 cblas_LINUX.a,所以我认为这是正确的。
请指出我为什么会收到这些错误,这真的很有帮助。CBLAS 不是应该是自包含的吗?为什么它甚至会显示这样的未定义引用?
感谢您的阅读和任何建议!
答案1
推荐的方法是将 CBLAS 作为 lapack、ATLAS 或 OpenBLAS 的一部分进行安装。有关完整说明,您可以查看这里
您需要首先通过
sudo apt-get install libblas-dev
或编译原始实现来安装 BLAS:1.1. 从以下网址下载最新版本的 BLAShttp://www.netlib.org/blas/
1.2. 解压并进入终端中的文件夹并运行 make
1.3.查找名为的文件
blas_LINUX.a
并将地址保存到此文件中编译 netlib cblas:
2.1. 从同一页面下载 CBLAS
2.2.取消存档
2.3.打开文件Makefile.in
2.4. 查找行
BLLIB = .../blas_LINUX.a
2.5. 在这里输入你在第一步中得到的地址
2.6. 进入解压后的 cblas 文件夹中的终端并运行 make
在包含文件夹中查找 cblas.h 文件,当你想编译链接 gcc 时,请针对此文件夹
答案2
我尝试按照 Foad 的说明进行操作,并认为我接近成功,但最终无法让程序识别我已经安装了 CBLAS。
我最终看到了对这个问题,这让我找到了立即有效的解决方案,只需从预先存在的包中安装它即可。
sudo apt install libopenblas-dev
我希望你提出这个问题八年后仍然觉得这个答案有用。
答案3
将变量 BLLIB 更改为动态的位置拉帕克图书馆。
如果您不知道,可以使用以下命令查找:
locate liblapack
如果你已经正确安装,你应该可以在
/usr/lib/liblapack.a
/usr/lib/liblapack.so
因此,请进行以下更改,
BLLIB=/usr/lib/
然后就可以执行下面一组命令来编译。
rm Makefile.in
ln -s Makefile.LINUX Makefile.in
make all
如果您能够成功编译,请回复。