sabato 16 dicembre 2006

Matlab Symbolic Toolbox on Linux - GLIBC_2.0 issue risolta anche su kernel 2.6.17

Ciao a tutti!
Innanzitutto devo ringraziare slackwarelife e un anonimo (che spero si faccia vivo presto con almeno il suo nick!) per avermi linkato da due diverse fonti la soluzione al problema riguardo il Symbolic Toolbox di Matlab e il suo rimando alla GLIBC_2.0 che non viene trovata!

Se siete su questa pagina molto probabilmente state cercando una soluzione al seguente messaggio di errore... cattiva sorpresa dopo una corretta installazione di Matlab su Linux:
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(:));
Fin qui ce l'eravamo cavata con un metodo poco ortodosso quale settare la variabile di sistema LD_ASSUME_KERNEL a 2.4.1 inibendo così la chiamata della libmaple che faceva crashare il tutto.

Passati a kernel 2.6.17 (per gli Ubuntu-users come il sottoscritto, passati dalla Dapper alla Edgy) questo metodo non funziona più perchè col kernel nuovo impostare questa variabile risulta inevitabilmente in un mancato riconoscimento delle librerie base da parte della shell in cui si è eseguito il comando export... quindi si modifica correttamente la variabile globale del sistema come prima ma stavolta non si riesce più a chiamare matlab in quanto la shell non risponde più ai comandi principali.
Per essere più precisi dopo aver impostato la variabile globale LD_ASSUME_KERNEL uguale a 2.4.1 la shell non trova più la libc6.so che serve tra l'altro per lanciare i programmi: insomma bello schifo MATLAB non parte!!!

Invece di tornare alla Dapper o di fare casini vari con il kernel ho preferito aspettare e dedicarmi ad altro anche perchè il Symbolic Toolbox in questo periodo non mi era indispensabile.

Ieri mattina i due intrepidi bloggers di cui sopra mi hanno commentato gli articoli in italiano e in inglese e mi hanno fornito la soluzione!

Sulla base delle informazioni recuperate ho risolto così:

scaricate QUESTO FILE con la libmaple.so modificata per non linkare più la GLIBC_2.0

Scompattate lo zip, facciamo che ora avete il file libmaple.so sul desktop altrimenti cambiate i percorsi che indicherò di seguito.

Da terminale andate nella directory dove avete installato MATLAB nel mio caso:
~$ cd /usr/local/matlab7
andate nella cartella bin/glnx86
[cart_install]$ cd bin/glnx86
fate una copia di backup della libreria correntemente installata:
$ sudo mv libmaple.so libmaple.so.old
copiate il file libmaple.so in questa cartella:
$ sudo cp /home/[utente]/Desktop/libmaple.so ./
cambiate il proprietario e il gruppo del file
$chown root:root libmaple.so
rendete eseguibile dal proprietario, dal gruppo e da chiuque il file in questione:
$chmod ugo+x libmaple.so
mini spiegazione...
"u" sta per user: il proprietario del file
"g" sta per group: il gruppo a cui è associato il file
"o" sta per others: tutti gli utenti

"+x" significa aggiungi il permesso di esecuzione (per toglierlo basta scrivere "-x")

quindi abbiamo aggiunto il permesso di esecuzione del file della libreria sia al proprietario "u" che agli utenti del gruppo a cui è associato il file "g", sia all'utente generico "o"!
Che bello "ugo" è anche simpatico!!! ;-)

Per vedere i permessi dei vari file usate ls -l invece di ls.

Ora è tutto a posto, questa è la soluzione definitiva poichè la libreria nuova non si rifà più alla GLIBC_2.0 perchè ha già dentro di sè tutte le funzioni che gli servono.

Sono stato più lungo del previsto ma almeno ho dato anche 2 dritte su chmod! :-P
Viva UGO e viva Linux!

see ya!

Link utili:
http://forum.ubuntu-fr.org/viewtopic.php?pid=575013
http://rapidshare.com/files/6442064/libmaple.zip
http://www.mathworks.com/support/solutions/data/1-1BDU5.html

PS: ovviamente sto parlando del computer del mio vicino che ha MATLAB 7 R14 con la licenza e che ha installato anche lui Edgy! ;-)

7 commenti:

  1. sei un grande!
    Non avrei proprio saputo come risolvere il problema senza le tue dritte!
    Mariarita

    RispondiElimina
  2. Il problema del Symbolic Toolbox può essere collegato al fatto che la mia Edgy Eft (kernel 2.6.11-generic) non riesce a caricare la GUI del Matlab 7 (che ho installato)...mentre mi funziona coorettamente da riga di comando (usando matlab -nojwm)?

    RispondiElimina
  3. @ Mariarita: sono contento di esserti stato utile! ;-)

    @ anonimo: la GUI è fatta in Java, serve quindi che tu abbia installato la Java Virtual Machine perchè si veda. A questo punto che tu non ce l'abbia mi sembra strano perchè Matlab ne installa una versione che ha lui nel CD se non la trova... per cui penso che sia un problema di intallazione...
    Io su ArchLinux mi sono scervellato per alcune ore su qualcosa del genere.. e poi ho scoperto che mi ero dimenticato di eseguire lo script di bash di setup una volta completata l'installazione. Questo script sistema java, i permessi delle librerie condivise e tutta una serie di cose che non hanno deciso di non far fare all'installer.
    Insomma, ricontrolla il mitico file di testo con le istruzioni di installazione magari ti manca solo da far girare il famoso script matlab-install che trovi nella cartella [matlab]/bin
    Sperando che sia quello ti auguro buoni calcoli... altrimenti posta pure le tue perplessità!
    bYe,
    Andy

    RispondiElimina
  4. Hello,

    While I apologize for my ignorance of Italian, I also have to thank you for you post. I have been looking for the solution to that problem for several days now. Grazie.
    Yuri

    RispondiElimina
  5. Ti ringrazio! Avevo lo stesso problema e ci sbattevo la testa da un po'. Ora funziona anche al mio vicino!

    RispondiElimina
  6. Grazie, funziona!

    Ai dummies come me conviene spiegare che i comandi chown e chmod di cui sopra vanno sudo-ati

    RispondiElimina
  7. Grazie, utilissimo!!

    RispondiElimina