2017-09-13 102 views
1

我拼命地嘗試在我的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命令的**完整**輸出。 –

回答

1

務必安裝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

0

我跟着人民聖戰者組織的答案,但我得到了以下錯誤:

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)