In questo post spiegherò come compilare questa versione di GNU Octave. Qualche mese fa avevamo visto come compilare la versione 3.2.2. Non sarà molto diverso compilare la 3.4.0, anzi, personalmente ho incontrato molti meno problemi nel compilare la 3.4.0 rispetto alla 3.2.2. La guida è stata sperimentata su Ubuntu 10.10, non dovrebbero esserci praticamente differenze per compilare GNU Octave su Debian Sid. Per le altre distribuzioni GNU/Linux le uniche cose differenti saranno probabilmente i comandi da usare per richiamare il gestore pacchetti utilizzato.
Per prima cosa installiamo il compilatore installando il metapacchetto
build-essential
. Questo può essere installato da Synaptic, oppure da terminale con il comando:sudo apt-get install build-essentialIl metapacchetto
build-essential
installa i compilatori se non già presenti, se sono già installati... non fa praticamente nulla. In questo modo comunque ci assicuriamo di averli installati. Dopo di ciò installiamo le dipendenze, ovvero le librerie necessarie per la compilazione di GNU Octave. Possiamo fare ciò molto velocemente da terminale con il comando:sudo apt-get build-dep octave3.2Questo comando installerà le dipendenze necessarie per compilare il ramo 3.2 di GNU Octave, ma queste sono praticamente identiche a quelle del ramo 3.4. Manca solo una libreria da installare. Non impedisce la compilazione, però potrebbe essere utile in alcuni casi. Si chiama
bison
e può essere installata come al solito da Synaptic oppure da terminale con il comandosudo apt-get install bisonScarichiamo ora il codice sorgente di GNU OCtave: http://www.gnu.org/software/octave/download.html. La versione 3.4.0 può essere scaricata da terminale con il comando
wget ftp://ftp.gnu.org/gnu/octave/octave-3.4.0.tar.bz2Scompattiamo l'archivio. Lo si può fare per via grafica oppure da terminale con il comando
tar xjvf octave-3.4.0.tar.bz2Entriamo con il terminale nella cartella principale del codice sorgente di GNU Octave:
cdd octave-3.4.0/Leggiamo i file
README
e INSTALL
che spiegano come si compila il programma. Per prima cosa dobbiamo configurare il programma usando lo script configure
. Potete vedere l'elenco delle opzioni di configurazione possibili richiamando lo script con l'opzione --help
:./configure --helpPossiamo ora configurare GNU Octave:
./configureSe lo ritenete necessario potete, naturalmente, aggiungere le opzioni che preferite. Se tutto è andato a buon fine dovreste leggere alla fine dell'output di
./configure
qualcosa di questo tipo:Octave is now configured for i686-pc-linux-gnu Source directory: . Installation prefix: /usr/local C compiler: gcc -mieee-fp -Wall -W -Wshadow -Wformat -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings -Wcast-align -Wcast-qual -g -O2 -pthread C++ compiler: g++ -mieee-fp -I/usr/include/freetype2 -Wall -W -Wshadow -Wold-style-cast -Wformat -Wpointer-arith -Wwrite-strings -Wcast-align -Wcast-qual -g -O2 Fortran compiler: gfortran -O -mieee-fp Fortran libraries: -L/usr/lib/gcc/i686-linux-gnu/4.4.5 -L/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/i686-linux-gnu/4.4.5/../../.. -L/usr/lib/i686-linux-gnu -lgfortranbegin -lgfortran -lm Lex libraries: LIBS: -lm AMD CPPFLAGS: AMD LDFLAGS: AMD libraries: -lamd BLAS libraries: -lblas CAMD CPPFLAGS: CAMD LDFLAGS: CAMD libraries: -lcamd CARBON libraries: CCOLAMD CPPFLAGS: CCOLAMD LDFLAGS: CCOLAMD libraries: -lccolamd CHOLMOD CPPFLAGS: CHOLMOD LDFLAGS: CHOLMOD libraries: -lcholmod COLAMD CPPFLAGS: COLAMD LDFLAGS: COLAMD libraries: -lcolamd CURL CPPFLAGS: CURL LDFLAGS: CURL libraries: -lcurl CXSPARSE CPPFLAGS: CXSPARSE LDFLAGS: CXSPARSE libraries: -lcxsparse DL libraries: -ldl FFTW3 CPPFLAGS: FFTW3 LDFLAGS: FFTW3 libraries: -lfftw3 FFTW3F CPPFLAGS: FFTW3F LDFLAGS: FFTW3F libraries: -lfftw3f fontconfig CFLAGS: fontconfig LIBS: -lfontconfig FT2_CFLAGS: -I/usr/include/freetype2 FT2_LIBS: -lfreetype -lz GLPK CPPFLAGS: GLPK LDFLAGS: GLPK libraries: -lglpk graphics CFLAGS: -g -O2 -D_THREAD_SAFE -D_REENTRANT graphics LIBS: -Wl,-Bsymbolic-functions -lfltk_gl -lfltk Magick++ CPPFLAGS: -I/usr/include/GraphicsMagick Magick++ LDFLAGS: Magick++ libraries: -lGraphicsMagick++ -lGraphicsMagick HDF5 CPPFLAGS: HDF5 LDFLAGS: HDF5 libraries: -lhdf5 LAPACK libraries: -llapack OPENGL libraries: -lfontconfig -lGL -lGLU PTHREAD flags: -pthread PTHREAD libraries: QHULL CPPFLAGS: QHULL LDFLAGS: QHULL libraries: -lqhull QRUPDATE libraries: -lqrupdate READLINE libraries: -lreadline REGEX libraries: -L/usr/lib -lpcre TERM libraries: -lncurses UMFPACK libraries: -lumfpack X11 include flags: X11 libraries: -lX11 Z CPPFLAGS: Z LDFLAGS: Z libraries: -lz Default pager: less gnuplot: gnuplot Do internal array bounds checking: false Build static libraries: false Build shared libraries: true Dynamic Linking: true (dlopen) Include support for GNU readline: true 64-bit array dims and indexing: falseSe non avessimo installato
bison
avremmo inoltre letto un avviso di questo tipo:configure: WARNING: I didn't find bison, but it's only a problem if you need to reconstruct parse.cc configure: WARNING: OpenGL libs (GL and GLU) not found. Native graphics will be disabled. configure: WARNING: configure: WARNING: I didn't find the necessary libraries to compile native configure: WARNING: graphics. It isn't necessary to have native graphics, configure: WARNING: but you will need to have gnuplot installed or you won't configure: WARNING: be able to use any of Octave's plotting commands configure: WARNING: configure: configure: NOTE: libraries may be skipped if a library is not found OR configure: NOTE: if the library on your system is missing required features.Questo è il messaggio che ho ottenuto io dopo la prima configurazione (non avevo però ancora installato
bison
). Come potete vedere mi è stata segnalata l'assenza delle librerie OpenGL. Ho risolto questo "problema" (non è un vero e proprio problema perché si tratta solo di un avviso, non è un errore) installando i pacchetti libgl1-mesa-dev
e libglu1-mesa-dev
:sudo apt-get install libgl1-mesa-dev libglu1-mesa-devNormalmente questo problema non dovrebbe verificarsi perché questi pacchetti dovrebbero essere installati usando
apt-get build-dep octave3.2
, non so bene per quale motivo a me sono stati rimossi.Dopo aver finalmente configurato GNU Octave possiamo compilarlo con il comando
makePer rendere più veloce la compilazione, chi ha un processore multicore può passare a
make
l'opzione -j n
, dove n
è il numero di core del processore (o meglio di job simultanei che può gestire, però per semplificare il discorso parliamo di core). Quindi chi, per esempio, ha un processore con quattro core potrà usare per compilare GNU Octave il comandomake -j 4Se la compilazione va a buon fine (a seconda della potenza di calcolo del proprio computer questa operazione può richiedere da poche decine di minuti a qualche ora) alla fine dell'operazione leggerete sul terminale un messaggio di questo tipo:
Octave successfully built. Now choose from the following: ./run-octave - to run in place to test before installing make check - to run the tests make install - to install (PREFIX=/usr/local) make[2]: uscita dalla directory "/[...]/octave-3.4.0" make[1]: uscita dalla directory "/[...]/octave-3.4.0"Come potete vedere, prima di installare Octave potete avviarlo per verificare se funzioni con il comando
./run-octaveInfine possiamo installarlo con il comando
sudo make installSe invece vogliamo crare un pacchetto .deb per rendere più semplice la successiva installazione o rimozione possiamo usare
checkinstall
:sudo checkinstall
Very helpful. Thank you
RispondiEliminaYou are welcome :-)
RispondiEliminaQuando provo a compilare, mi dà questo errore:
RispondiEliminaIn file included from oct-alloc.cc:29:0:oct-alloc.h:32:28: error: expected ')' before 'item_sz'
oct-alloc.h:39:9: error: expected ';' at end of member declaration
oct-alloc.h:39:23: error: expected ')' before 'size'
oct-alloc.h:42:23: error: 'size_t' has not been declared
oct-alloc.h:57:3: error: 'size_t' does not name a type
oct-alloc.cc:32:26: error: 'void* octave_allocator::alloc' is not a static member of 'class octave_allocator'
oct-alloc.cc:32:26: error: 'size_t' was not declared in this scope
oct-alloc.cc:32:26: note: suggested alternative:
/usr/include/c++/4.6/i686-linux-gnu/./bits/c++config.h:155:26: note: 'std::size_t'
oct-alloc.cc:33:1: error: expected ',' or ';' before '{' token
make[3]: *** [liboctave_la-oct-alloc.lo] Errore 1
make[3]: *** Attesa per i processi non terminati....
mv -f .deps/liboctave_la-lo-specfun.Tpo .deps/liboctave_la-lo-specfun.Plo
make[3]: uscita dalla directory "/home/luca/octave-3.4.0/liboctave"
make[2]: *** [all] Errore 2
make[2]: uscita dalla directory "/home/luca/octave-3.4.0/liboctave"
make[1]: *** [all-recursive] Errore 1
make[1]: uscita dalla directory "/home/luca/octave-3.4.0"
make: *** [all] Errore 2
Qualcuno sa di che cosa si tratta?