too cool for Bill

sabato, ottobre 21, 2006

Matlab Symbolic Toolbox sotto Linux - Come sistemare la GLIBC_2.0

Uella! Galvanizzato anche solo minimamente dalle 2 (e dico 2) visite grazie all'articolo su KOctave, vi rendo partecipi della scoperta riguardo al Symbolic Toolbox di Matlab con Kubuntu, che ieri, dopo non poche imprecazioni sono riuscito a configurare.
Ovviamente stiamo parlando del computer del mio vicino, che guarda caso usa Kubuntu con Kernel 2.6 e ha Matlab con la licenza e ogni tanto me lo fa usare per l'univertità! :-)
Bene, ieri mi sono trovato ad avere assoluto bisogno del Symbolic Toolbox per fare un'operazione, sapevo già che non andava ma ho provato lo stesso... e Matlab come le volte precenti mi ha risposto picche così:

Unable to load mex file: /usr/local/matlab7/toolbox/symbolic/maplemex.mexglx.
/usr/local/matlab7/bin/glnx86/libmaple.so: symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference
??? Invalid MEX-file '/usr/local/matlab7/toolbox/symbolic/maplemex.mexglx': .

Error in ==> maple at 104
[result,status] = maplemex(statement);

Error in ==> sym.maple at 85
[result,status] = maple(statement);

Error in ==> sym.plus at 22
X = maple(A(:),'+',B(:));

Dopo aver installato praticamente tutte le librerie possibili e immaginabili di C e C++ ho trovato un post in un forum che dice semplicemente di eseguire questo comando prima dell'esecuzione di Matlab:

you@Kubuntu$ export LD_ASSUME_KERNEL=2.4.1

In sostanza il comando dice alla shell di considerare i comandi da lì in avanti (in quella sessione di bash) come se si stesse usando la versione 2.4.1 del kernel.
In questo modo il Symbolic Toolbox funziona completamente, nel senso che se prima era possibile solo definire variabili simboliche ma non usarle a causa dell'errore sopra citato, ora la funzionalità è completa.
Da quanto ho usato questo trucchetto non ho riscontrato ulteriori problemi del genere.
Per facilitare l'avvio senza dover ogni volta ricordarmi questo comando ho modificato il profilo della shell di bash creando un alias nel file .bashrc nella cartella home in questo modo:

# Alias 4 Matlab
alias matlab-start='export LD_ASSUME_KERNEL=2.4.1; matlab -nosplash'

Personalmente ho inserito queste righe dopo il blocco some other aliases ma dovrebbe funzionare in ogni posizione del file di configurazione della shell di bash.
Grazie all'alias ogni volta che scrivo "matlab-start" la shell esegue in realtà i due comandi tra le virgolette. Notate che Matlab è chiamato con l'opzione "nosplash" che inibisce la finestrella con il simbolo di Matlab all'avvio, questo velocizza un po' lo startup dell'applicazione ma se volete ri-abilitarlo basta che togliete l'opzione quando create l'alias in .bashrc
E' tutto, spero di essere stato abbastanza chiaro, se avete problemi commentate e vedremo!

Buon lavoro con il Symbolic Toolbox di Matlab!

see ya!

2 commenti:

Anonimo ha detto...

ciao, volevo chiederti una informazione,
per invocare matlab uso il seguente script(matlab.sh):

#!/bin/sh
export LIBXCB_ALLOW_SLOPPY_LOCK=1
matlab -desktop

e il tutto mi funziona.
ora dovrei utilizzare il Symbolic Toolbox di Matlab, e mi da i tuoi medesimi errori. ho seguito il tuo consiglio, quindi prima di invocare matlab (con matlab.sh) ho eseguito il comando

export LD_ASSUME_KERNEL=2.4.1

solo che matlab non parte e nella shell mi compare il seguente errore:

/bin/sh: error while loading shared libraries: libdl.so.2: cannot open shared object file: No such file or directory

io uso opensuse 10.3
avresti qualche idea per risolvere il problema??
ciao grazie

wandrian ha detto...

Ciao!

L'unica cosa che mi viene in mente è che il nome della libreria in questione su opensuse sia leggermente diverso da quella dello standard (nome che cerca Matlab).

Quindi puoi provare alla brutta a cecare il file tra le librerie che ha quasi lo stesso nome magari tranne il semplice numero finale che è diverso.

Mettiamo che trovi nel tuo sistema la libreria chiamata così: libdl.so.0

Puoi provare allora a fare un link simbolico che si chiami libdl.so.2 e in realtà rimandi alla libdl.so.0 in modo che Matlab legga direttamente quella libreria.

Se è un problema di standard sui nomi delle libreria (come a volte capita) il link simbolico dovrebbe risolverlo...

La cosa che mi lascia un po' perplesso è che solo se invochi il kernel "vecchio" ti da questo errore (ma magari è proprio facendo finta di avere sotto un kernel vecchio che cerca una libreria con un altro nome...)

Comunque tentar non nuoce...
Spero di esserti stato utile.

bYe,
Andy