Tôi đang cố cài đặt octave 3.8.1 mới nhất từ nguồn trong một cụm đang chạy redhat + IBM LSF. Tôi không có quyền ghi vào bất cứ nơi nào khác ngoại trừ thư mục chính của riêng tôi, đó là lý do tại sao tôi phải cài đặt quãng tám từ nguồn. Các blas và lapack được cung cấp bởi cụm không hoạt động vì vậy tôi phải xây dựng chúng một mình. Bây giờ tôi đã hoàn thành biên soạn cả blas và LAPACK chuyền ./configure
, nhưng khi tôi chạy làm, một lỗi được báo cáo như sau:làm thế nào để biên dịch lapack để nó có thể được sử dụng chính xác trong quá trình cài đặt quãng tám?
Đây là những bước tôi sử dụng để xây dựng của riêng tôi BLAS
và LAPACK
. Nguồn của BLAS là trong ~/src/BLAS
trong khi nguồn của LAPACK là trong ~/src/lapack-3.5.0
và nguồn của octave 3.8.1 là trong ~/src/octave-3.8.1
. Chỉ với hai mô-đun, 1) pcre/8.33 2) acml/5.3.1/gfortran64
, nạp, tôi biên soạn BLAS chia sẻ thư viện sử dụng
gfortran -shared -O2 *.f -o libblas.so -fPIC
và thư viện tĩnh nhờ sủ dụng
gfortran -O2 -c *.f -fPIC
ar cr libblas.a *.o
Sau đó, tôi sao chép các thư viện chia sẻ libblas.so
tới ~/src/quãng tám-3.8. 1. Nội dung của make.inc
tệp trong thư mục của lapack là:
####################################################################
# LAPACK make include file. #
# LAPACK, Version 3.5.0 #
# November 2013 #
####################################################################
#
SHELL = /bin/sh
#
# 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. Define LOADER and LOADOPTS to refer to the loader and
# desired load options for your machine.
#
FORTRAN = gfortran
OPTS = -shared -O2 -fPIC
DRVOPTS = $(OPTS)
NOOPT = -O0 -frecursive
LOADER = gfortran
LOADOPTS =
#
# 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 neither of this works...you can use the NONE value... In that case, SECOND and DSECND will always return 0
# TIMER = NONE
#
# Configuration LAPACKE: Native C interface to LAPACK
# To generate LAPACKE library: type 'make lapackelib'
# Configuration file: turned off (default)
# Complex types: C99 (default)
# Name pattern: mixed case (default)
# (64-bit) Data model: LP64 (default)
#
# CC is the C compiler, normally invoked with options CFLAGS.
#
CC = gcc
CFLAGS = -O3
#
# The archiver and the flag(s) to use when building archive (library)
# If you system has no ranlib, set RANLIB = echo.
#
ARCH = ar
ARCHFLAGS= cr
RANLIB = ranlib
#
# 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 =
# 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
BLASLIB = ~/src/BLAS/libblas.a
LAPACKLIB = liblapack.a
TMGLIB = libtmglib.a
LAPACKELIB = liblapacke.a
Sau đó, tôi nhập để biên dịch LAPACK. Sau khi biên dịch, tôi sao chép đầu ra liblapack.a
thành ~/src/octave-3.8.1.
Dòng ./configure
lệnh là:
./configure --prefix=$HOME/bin/octave --with-blas=./libblas.so --with-lapack=$HOME/src/octave-3.8.1/liblapack.a --disable-readline --enable-64
tôi có thể vượt qua ./configure. Sau đó, tôi gõ make
để cố gắng xây dựng quãng tám 3.8.1 và tôi đã nhận được lỗi trên.
Từ tệp make.inc
có thể thấy rằng tôi đã làm theo đề xuất của trình biên dịch "recompile with -fPIC
" và sửa đổi make.inc cho phù hợp. Tôi cũng thêm công tắc -shared
vào biến số OPTS
. Ngoài ra, tôi đã thử sử dụng phiên bản LAPACK cũ nhưng không hoạt động. Tôi thực sự không biết tại sao lỗi vẫn xuất hiện. Vì vậy, tôi tự hỏi nếu bạn có thể xin vui lòng cho tôi biết làm thế nào để biên dịch các thư viện LAPACK
để nó có thể được sử dụng một cách chính xác trong quá trình cài đặt octave 3.8.1. Hai điểm sau đây có thể đáng xem xét. (1) tôi nên biên dịch lapack như một thư viện tĩnh hoặc một thư viện được chia sẻ? (2) nên -fPIC
chuyển đổi được áp dụng để biên soạn lapack hoặc octave của make
? Nếu sau này, làm thế nào để áp dụng -fPIC để thực hiện? Bạn không phải bị giới hạn ở hai điểm trên vì có thể có các lý do khác cho lỗi này. Bất kỳ lời khuyên nào để giải quyết vấn đề này đều được hoan nghênh. Nếu bạn cần bất kỳ thông tin nào khác, vui lòng cho tôi biết. Cảm ơn bạn.
Bạn đã dọn dẹp các tệp xây dựng phụ trợ ở giữa các lần thử chạy 'make'? Về việc truyền cờ đến bản dựng Octave, bạn có thể thực hiện trực tiếp trong bước cấu hình: './configure CXXFLAGS = '- O2 -fPIC''. – juliohm
Cảm ơn bạn. Tôi gõ "làm sạch" trước khi thực hiện. Tôi đã thêm "CXXFLAGS = '- O2 -fPIC'" vào các đối số dòng lệnh cho ./configure, nhưng cùng một lỗi xảy ra. – user2384994
@ user2384994 bạn đã thành công chưa? Có lẽ bạn cũng nên sửa đổi CFLAGS, LOADOPTS và NOOPT trong 'make.inc' (chỉ đoán). Ngoài ra bạn có thể đăng nhập xây dựng lapack và kiểm tra xem trình biên dịch có thực sự được gọi với cờ -fPIC hay không. –