是否可以在Mac OSX 10.11上安装lapack?

时间:2017-08-04 21:05:23

标签: macos homebrew lapack

我想使用需要lapack的软件才能正确编译。但我无法在Mac上进行lapack工作。

http://www.netlib.org/lapack/

我正在尝试安装lapack-3.7.1

我输入make,此消息到达:

 make: *** No rule to make target `lsame.o', needed by `testlsame'.  Stop.

我试图修改make.inc,但似乎我在互联网上看到的一些说明没有更新。我看到我们必须将PLAT更改为PLAT = _DARWIN。

http://www.commonmediainc.com/2008/03/24/building-lapack-and-rubys-linalg-on-mac-os-x/

我在make.inc文件中看不到它。

是否有一些分步说明来安装lapack?

make.inc文件:

####################################################################
#  LAPACK make include file.                                       #
#  LAPACK, Version 3.7.0                                           #
#  December 2016                                                   #
####################################################################

SHELL = /bin/sh

#  CC is the C compiler, normally invoked with options CFLAGS.
#
CC     = gcc
CFLAGS = -O3

#  Modify the FORTRAN and OPTS definitions to refer to the compiler
#  and desired compiler options for your machine.  NOOPT refers to
#  the compiler options desired when NO OPTIMIZATION is selected.
#
#  Note: During a regular execution, LAPACK might create NaN and Inf
#  and handle these quantities appropriately. As a consequence, one
#  should not compile LAPACK with flags such as -ffpe-trap=overflow.
#
FORTRAN = gfortran
OPTS    = -O2 -frecursive
DRVOPTS = $(OPTS)
NOOPT   = -O0 -frecursive

#  Define LOADER and LOADOPTS to refer to the loader and desired
#  load options for your machine.
#
LOADER   = gfortran
LOADOPTS =

#  The archiver and the flag(s) to use when building an archive
#  (library).  If your system has no ranlib, set RANLIB = echo.
#
ARCH      = ar
ARCHFLAGS = cr
RANLIB    = ranlib

#  Timer for the SECOND and DSECND routines
#
#  Default:  SECOND and DSECND will use a call to the
#  EXTERNAL FUNCTION ETIME
#TIMER = EXT_ETIME
#  For RS6K:  SECOND and DSECND will use a call to the
#  EXTERNAL FUNCTION ETIME_
#TIMER = EXT_ETIME_
#  For gfortran compiler:  SECOND and DSECND will use a call to the
#  INTERNAL FUNCTION ETIME
TIMER = INT_ETIME
#  If your Fortran compiler does not provide etime (like Nag Fortran
#  Compiler, etc...) SECOND and DSECND will use a call to the
#  INTERNAL FUNCTION CPU_TIME
#TIMER = INT_CPU_TIME
#  If none of these work, you can use the NONE value.
#  In that case, SECOND and DSECND will always return 0.
#TIMER = NONE

#  Uncomment the following line to include deprecated routines in
#  the LAPACK library.
#
#BUILD_DEPRECATED = Yes

#  LAPACKE has the interface to some routines from tmglib.
#  If LAPACKE_WITH_TMG is defined, add those routines to LAPACKE.
#
#LAPACKE_WITH_TMG = Yes

#  Location of the extended-precision BLAS (XBLAS) Fortran library
#  used for building and testing extended-precision routines.  The
#  relevant routines will be compiled and XBLAS will be linked only
#  if USEXBLAS is defined.
#
#USEXBLAS = Yes
#XBLASLIB = -lxblas

#  The location of the libraries to which you will link.  (The
#  machine-specific, optimized BLAS library should be used whenever
#  possible.)
#
BLASLIB      = ../../librefblas.a
CBLASLIB     = ../../libcblas.a
LAPACKLIB    = liblapack.a
TMGLIB       = libtmglib.a
LAPACKELIB   = liblapacke.a

Makefile:

include ./make.inc

all: testlsame testslamch testdlamch testsecond testdsecnd testieee testversion

testlsame: lsame.o lsametst.o
    $(LOADER) $(LOADOPTS) -o $@ $^

testslamch: slamch.o lsame.o slamchtst.o
    $(LOADER) $(LOADOPTS) -o $@ $^

testdlamch: dlamch.o lsame.o dlamchtst.o
    $(LOADER) $(LOADOPTS) -o $@ $^

testsecond: second_$(TIMER).o secondtst.o
    @echo "[INFO] : TIMER value: $(TIMER) (given by make.inc)"
    $(LOADER) $(LOADOPTS) -o $@ $^

testdsecnd: dsecnd_$(TIMER).o dsecndtst.o
    @echo "[INFO] : TIMER value: $(TIMER) (given by make.inc)"
    $(LOADER) $(LOADOPTS) -o $@ $^

testieee: tstiee.o
    $(LOADER) $(LOADOPTS) -o $@ $^

testversion: ilaver.o LAPACK_version.o
    $(LOADER) $(LOADOPTS) -o $@ $^

run: all
    ./testlsame
    ./testslamch
    ./testdlamch
    ./testsecond
    ./testdsecnd
    ./testieee
    ./testversion

clean: cleanobj cleanexe cleantest
cleanobj:
    rm -f *.o
cleanexe:
    rm -f test*
cleantest:
    rm -f core

.SUFFIXES: .o .f
.f.o:
    $(FORTRAN) $(OPTS) -c -o $@ $<

slamch.o: slamch.f ; $(FORTRAN) $(NOOPT) -c -o $@ $<
dlamch.o: dlamch.f ; $(FORTRAN) $(NOOPT) -c -o $@ $<

我已经尝试过Homebrew,但它无法正常工作:

brew install lapack

Error: No available formula with the name "lapack" 
==> Searching for similarly named formulae...
Error: No similarly named formulae found.
==> Searching taps...
This formula was found in a tap:
homebrew/science/lapack-manpages
To install it, run:
  brew install homebrew/science/lapack-manpages

但即使brew install homebrew/science/lapack-manpages也无效......

Homebrew 0.9.9 (git revision 1158; last commit 2016-07-20) Homebrew/homebrew-core (git revision f7372; last commit 2016-07-20)

2 个答案:

答案 0 :(得分:1)

macOS的较新版本(包括10.11)随附vecLib中包含的LAPACK实现,该实现包含在macOS中。因此,如果您的软件支持vecLib,则可能根本不需要安装LAPACK。

如果您需要安装单独的LAPACK,它现在可以作为Homebrew核心中的Homebrew公式使用。因此brew install lapack现在可以正常工作。

Homebrew lapack公式当前包含适用于OS X 10.11的预构建二进制“瓶”,因此安装应该简单快捷。

答案 1 :(得分:-1)

尝试

Brew cask install lapack 

Brew cask install Mac ports;port install lapack