मैं Redhat + IBM LSF चलाने वाले क्लस्टर में स्रोत से नवीनतम ऑक्टेट 3.8.1 स्थापित करने का प्रयास कर रहा हूं। मेरे पास अपने घर के डीआईआर को छोड़कर कहीं और लिखने की पहुंच नहीं है, इसलिए मुझे स्रोत से ऑक्टेटव इंस्टॉल करना है। क्लस्टर द्वारा प्रदान किए गए ब्लैस और लैपैक काम नहीं करते हैं इसलिए मुझे उन्हें स्वयं बनाना है। मैं अब दोनों ब्लास और LAPACK संकलन समाप्त कर दिया है और ./configure
पारित कर दिया, लेकिन जब मैं बनाने के चलाने के लिए, एक त्रुटि के रूप में इस रिपोर्ट की जाती है:लैपैक को संकलित कैसे करें ताकि इसे ऑक्टेट की स्थापना के दौरान सही ढंग से उपयोग किया जा सके?
ये कदम मैं अपने खुद के BLAS
और LAPACK
बनाने के लिए उपयोग कर रहे हैं। बीएलएएस का स्रोत ~/src/BLAS
में है जबकि एलएपीएक्स का स्रोत ~/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
तो मैं ~/src/सप्तक-3.8 करने के लिए शेयर की गई लाइब्रेरी libblas.so
कॉपी संकलित। 1। LAPACK के dir में make.inc
फ़ाइल की सामग्री है:
####################################################################
# 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
तब मैं 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
मैं कॉन्फ़िगर पारित कर सकते हैं। फिर मैं ऑक्टेट 3.8.1 बनाने की कोशिश करने के लिए make
टाइप करता हूं और मुझे उपरोक्त त्रुटि मिली है।
make.inc
फ़ाइल से यह देखा जा सकता है कि मैंने कंपाइलर "recompile with -fPIC
" के सुझाव का पालन किया है और तदनुसार make.inc को संशोधित किया है। मैं OPTS
चर में -shared
स्विच भी जोड़ता हूं। इसके अलावा, मैंने पुराने LAPACK संस्करण का उपयोग करने की कोशिश की है लेकिन काम नहीं कर रहा है। मुझे वास्तव में कोई जानकारी नहीं है कि त्रुटि अभी भी क्यों आती है। तो मुझे आश्चर्य है कि क्या आप कृपया मुझे बता सकते हैं कि LAPACK
लाइब्रेरी को संकलित कैसे करें ताकि इसे ऑक्टेट 3.8.1 की स्थापना के दौरान सही ढंग से उपयोग किया जा सके। निम्नलिखित दो बिंदुओं पर विचार करने लायक हो सकता है। (1) क्या मुझे लैपैक को स्थिर पुस्तकालय या साझा लाइब्रेरी के रूप में संकलित करना चाहिए? (2) -fPIC
स्विच लैपैक संकलन या ऑक्टेट के make
पर लागू किया जाना चाहिए? यदि उत्तरार्द्ध, कैसे लागू करने के लिए - एफपीआईसी बनाने के लिए? आपको उपरोक्त दो बिंदुओं तक सीमित नहीं होना चाहिए क्योंकि त्रुटि के अन्य कारण हो सकते हैं। इस समस्या को हल करने के लिए कोई सलाह स्वागत है। अगर आपको किसी अन्य जानकारी की ज़रूरत है तो कृपया मुझे बताएं। धन्यवाद।
क्या आपने 'मेक' चलाने के अपने प्रयासों के बीच सहायक बिल्ड फाइलों को साफ़ किया है? ऑक्टेव बिल्ड में फ़्लैग पास करने के संबंध में, आप इसे सीधे कॉन्फ़िगर चरण में कर सकते हैं: './configure CXXFLAGS = '- O2 -fPIC''। – juliohm
धन्यवाद। मैंने बनाने से पहले "साफ करें" टाइप किया। मैंने ./configure के लिए कमांड लाइन तर्कों में "CXXFLAGS = '- O2 -fPIC' जोड़ा, लेकिन एक ही त्रुटि होती है। – user2384994
@ user2384994 क्या आप सफल हुए? शायद आपको 'make.inc' (बस अनुमान लगाने) में CFLAGS, LOADOPTS और NOOPT को संशोधित करना चाहिए। इसके अलावा आप लैपैक बिल्ड लॉग कर सकते हैं और जांच सकते हैं कि कंपाइलर्स को वास्तव में -एफपीआईसी ध्वज के साथ बुलाया जाता है या नहीं। –