Я пытаюсь установить последнюю октаву 3.8.1 из исходного кода в кластере с Redhat+IBM LSF. У меня нет доступа для записи куда-либо еще, кроме моего собственного домашнего каталога, поэтому я должен установить октаву из исходного кода. blas и lapack, предоставляемые кластером, не работают, поэтому я должен собрать их самостоятельно. Я завершил компиляцию blas и lapack и передал ./configure
, но когда я запускаю make, появляется следующее сообщение об ошибке:
Это шаги, которые я использовал для создания собственных BLAS
и LAPACK
. Источник BLAS находится в ~/src/BLAS
, источник LAPACK — в ~/src/lapack-3.5.0
, а источник октавы 3.8.1 — в ~/src/octave-3.8.1
. Загрузив только два модуля 1) pcre/8.33 2) acml/5.3.1/gfortran64
, я скомпилировал разделяемую библиотеку BLAS, используя
gfortran -shared -O2 *.f -o libblas.so -fPIC
и статическая библиотека с использованием
gfortran -O2 -c *.f -fPIC
ar cr libblas.a *.o
Затем я копирую разделяемую библиотеку libblas.so
в ~/src/octave-3.8.1. Содержимое файла make.inc
в каталоге lapack:
####################################################################
# 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
Затем я набираю make для компиляции LAPACK. После компиляции я скопировал вывод liblapack.a
в ~/src/octave-3.8.1.
Командная строка ./configure
:
./configure --prefix=$HOME/bin/octave --with-blas=./libblas.so --with-lapack=$HOME/src/octave-3.8.1/liblapack.a --disable-readline --enable-64
Я могу передать ./configure. Затем я набираю make
, чтобы попытаться собрать октаву 3.8.1, и получаю указанную выше ошибку.
Из файла make.inc
видно, что я последовал совету компилятора "recompile with -fPIC
" и соответствующим образом изменил make.inc. Я также добавляю переключатель -shared
в переменную OPTS
. Кроме того, я пытался использовать старую версию LAPACK, но не работал. Я действительно понятия не имею, почему ошибка все еще выходит. Поэтому мне интересно, не могли бы вы рассказать мне, как скомпилировать библиотеку LAPACK
, чтобы ее можно было правильно использовать при установке октавы 3.8.1. Следующие два момента, возможно, заслуживают внимания. (1) должен ли я компилировать lapack как статическую библиотеку или разделяемую библиотеку? (2) должен ли переключатель -fPIC
применяться к компиляции lapack или make
октавы? Если второе, то как применить -fPIC чтобы сделать? Вам не нужно ограничиваться двумя вышеуказанными пунктами, так как могут быть и другие причины ошибки. Любые советы по решению этой проблемы приветствуются. Если вам нужна какая-либо другая информация, пожалуйста, сообщите мне. Спасибо.
make
? Что касается передачи флагов в сборку Octave, вы можете сделать это непосредственно на этапе настройки:./configure CXXFLAGS='-O2 -fPIC'
. - person juliohm   schedule 05.05.2014make.inc
(просто предположение). Также вы можете зарегистрировать сборку lapack и проверить, действительно ли компиляторы вызываются с флагом -fPIC. - person Jakob Kroeker   schedule 16.06.2014