是否可以在Mac OS X上编译SLATEC库?

问题描述:

我拼命地尝试在我的Mac OS Sierra 10.12.6上安装Fortran库SLATEC,但是我无法使其工作。我使用GCC编译器。是否可以在Mac OS X上编译SLATEC库?

我的具体步骤是:

$ mkdir slatec 
$ cd slatec 
$ cp ~/Downloads/slatec_src.tar . 
$ tar xopf slatec_src.tar 
$ cd src 

src文件夹不存在任何makefile文件。所以我(尝试)下载slatec4linux.tar。

$ cp ~/Downloads/slatec4linux.tar . 
$ tar xopf slatec4linux.tar 
$ cd slatec4linux 
$ sudo make install 

这是行不通的。错误消息:

mv static/libslatec.a /usr/local/lib; \ 
mv dynamic/libslatec.so /usr/local/lib; ldconfig; \ 
mv *.1 /usr/local/man/man1 
mv: rename static/libslatec.a to /usr/local/lib/libslatec.a: No such file or directory 
mv: rename dynamic/libslatec.so to /usr/local/lib/libslatec.so: No such file or directory 
/bin/sh: ldconfig: command not found 
mv: rename *.1 to /usr/local/man/man1/*.1: No such file or directory 
make: *** [install] Error 1 

我不知道任何人在Mac上完成安装。

+0

难道你运行'/ configure':要修复它./dynamic/makefile,变化:

libslatec.so: $(OBJ) $(FC) -shared -o [email protected] $(OBJ) 

来?它在'make'步骤中失败了吗? – Ross

+0

这是很有可能你必须手动调整生成文件。你试图使用哪种编译器?细节是编译器特定的。 –

+0

说*“关于错误架构的消息”*根本没用。请提供make命令的**完整**输出。 –

务必安装gfortran

http://www.owsiak.org/?p=3492

确保下载源和Linux的makefile,并把所有文件在同一水平。

通过在同一水平说,我的意思是:slatec_src.tgzmakefiledynamicstatic所有*.f文件从slatec4linux.tgz在同一个目录。

http://www.netlib.org/slatec/slatec_src.tgz

http://www.netlib.org/slatec/slatec4linux.tgz

确保出口FC变量

export FC=gfortran 

请务必更改内部动态此行/ Makefile中

libslatec.so: $(OBJ) 
    $(CC) -shared -o [email protected] $(OBJ) 

libslatec.so: $(OBJ) 
    $(FC) -shared -o [email protected] $(OBJ) 

呼叫使

make 

等待一点点。看看staticdynamic,文件应该在那里。现在

find . -name "libslatec*" 
./dynamic/libslatec.so 
./static/libslatec.a 

,您可以尝试执行make install(这里要注意,因为它会覆盖硬编码位置)。另外,您也可以使用拉帕茨

mkdir lapack 
cd lapack 
curl "http://www.netlib.org/lapack/lapack-3.7.1.tgz" -o lapack-3.7.1.tgz 
tar zxf lapack-3.7.1.tgz 
cd lapack-3.7.1 
ln -s make.inc.example make.inc 
make 

-L${WHERE_YOUR_BUILD_WAS_DONE}/dynamic -lslatec

安装你会发现liblapack.aLAPACK-3.7.1。您可以将其与您的代码链接。

与Fortran玩得开心!

+0

执行补充步骤之后产生以下错误消息建议的步骤: 为架构x86_64的未定义符号: “_dlamch_”,从引用: _d1mach_在d1mach.o “_slamch_”,从引用:在r1mach _r1mach_ .o ld:找不到架构x86_64的符号 collect2:错误:ld返回1退出状态 make [1]:*** [libslatec.so]错误1 make:*** [libslatec.so ]错误2 – Sonny

+0

键入: $ make 包含slatec_src.tgz中的所有* .f文件和slatec4linux.tgz中的makefile,dynamic和static。 – Sonny

+0

啊哈。尼斯。 错误消息之前的输出: gfortran -shared -o libslatec.so aaaaaa.o cnbdi.o dcv.o dqc25f.o ...(长列表.o-files).. splpup.o – Sonny

我跟着人民圣战者组织的答案,但我得到了以下错误:

Undefined symbols for architecture x86_64: 
    "_dlamch_", referenced from: 
     _d1mach_ in d1mach.o 
    "_slamch_", referenced from: 
     _r1mach_ in r1mach.o 
ld: symbol(s) not found for architecture x86_64 

显然,dlamchslamch是从LAPACK库过程。第一

libslatec.so: $(OBJ) 
    $(FC) -L$(WHERE_LAPACK_IS_INSTALLED) -llapack -shared -o [email protected] $(OBJ)