Опитвам се да инсталирам най-новата octave 3.8.1 от източника в клъстер, изпълняващ redhat+IBM LSF. Нямам достъп за писане никъде другаде освен собствената си домашна директория, затова трябва да инсталирам octave от източника. 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
, за да се опитам да изградя octave 3.8.1 и получих горната грешка.
От файла make.inc
може да се види, че съм последвал предложението на компилатора "recompile with -fPIC
" и съм променил съответно make.inc. Също така добавям превключвател -shared
в променливата OPTS
. Освен това се опитах да използвам старата версия на LAPACK, но не работи. Наистина нямам представа защо грешката все още излиза. Така че се чудя дали бихте могли да ми кажете как да компилирам библиотеката LAPACK
, така че да може да се използва правилно по време на инсталирането на octave 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