Pour cela j’ai juste écrit une fonction test11.b :
function test11b
fprintf(‘\n ça marche !\n’)
>>mcc -mv test11
En sortie de la compilation j’obtiens 4 fichiers :
mccExcludedFiles.log
test11 (mon standalone)
readme.txt
run_test11.sh
Le readme.txt explique clairement ce qu’il faut faire avec ces fichiers et je vais vous le démontrer.
- 2ère étape je teste sans lire le readme.txt:
Mais souventes fois les gens ne lisent pas le fichier readme.txt et ont tendance à vouloir de suite lancer l’exécutable . Et que se passe t-il si on essaie de lancer ./test11b ?
Et beh on aura le message d’erreur classique et populaire :
quefaurs@Ulysse:~$ ./test11b
./test11b: error while loading shared libraries: libmwmclmcrrt.so.7.16: cannot open shared object file: No such file or directory
Concrètement ce message signifie que vous avez peut être installé le MCR mais que Linux ne sait pas où aller le chercher …
- 3ème étape on ne panique pas !
Pas de panique je vous explique ce qu’il faut faire ! regardons les fichiers sortis de la compil :
mccExcludedFiles.log
Ce que raconte le log :
This file contains the list of various toolbox functions that are not
included in the CTF file. An error will be thrown if any of these functions
are called at run-time. Some of these functions may be from toolboxes
that you are not using in your application. The reason for this is that
these toolboxes have overloaded some methods that are called by your code.
If you know which toolboxes are being used by your code, you can use the -p
flag with the -N flag to list these toolboxes explicitly. This will
cause MATLAB Compiler to only look for functions in the specified toolbox
directories in addition to the MATLAB directories. Refer to the MCC
documentation for more information on this.
Donc ce fichier n’a pas d’intérêt pour ce test.
run_test11.sh
Dans le readme.txt on peut lire:
NOTE: When deploying standalone applications, it is possible
to run the shell script file run_test11b.sh
instead of setting environment variables. See
section 2 « Files to Deploy and Package ».
Attardons nous donc sur le shell script qui a le préfixe « run_ » et l’extension .sh.
Ça c’est vraiment un truc super qui est bien expliqué dans le readme.txt. Ça permet de lancer son standalone sans se préoccuper des variables d’environnement!
- 4ème étape je lance le shell script
Vu que mon MCR est installé sous /home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716 je n’ai qu’à taper dans un terminal Linux :
quefaurs@Ulysse:~$./run_test11b.sh /home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716/
ce qui donne:
quefaurs@Ulysse:~$./run_test11b.sh /home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716/
——————————————
Setting up environment variables
—
LD_LIBRARY_PATH is .:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716//runtime/glnxa64:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716//bin/glnxa64:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716//sys/os/glnxa64:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716//sys/java/jre/glnxa64/jre/lib/amd64/native_threads:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716//sys/java/jre/glnxa64/jre/lib/amd64/server:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716//sys/java/jre/glnxa64/jre/lib/amd64/client:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716//sys/java/jre/glnxa64/jre/lib/amd64
ça marche !
quefaurs@Ulysse:~$
A noter que le double slash après le v716 n’est pas requis , un seul suffit. J’ai juste copié collé ce que le .sh retournait.
OK maintenant on peut dire que notre MCR est bien installé et fonctionne correctement
Il ne reste plus qu’à mettre de façon permanente les variables d’environnement LD_LIBRARY_PATH et XAPPLRESDIR comme indiqué dans le readme.txt . Franchement ce fichier porte bien son nom … à une exception près où il est laissé le mot r2010a:
If you have version 7.16 of MCR installed in
/mathworks/home/application/R2010a/v716, run the shell script as:
./run_test11b.sh /mathworks/home/application/R2010a/v716
on s’attendrait plus à R2011b à la place de R2010a mais ce n’est pas grave !
- 5ème étape je teste les export
Mon but est de plus lancer le shell script run_test11b.sh mais juste test11b.
Allez je vais vous montrer pourquoi il faut être rigoureux dans cette étape. Le readme.txt nous parlait de deux variables d’environnement à mettre à jour pour que ça fonctionne de façon permanente: LD_LIBRARY_PATH et XAPPLRESDIR.
Je vais faire exprès de ne mettre à jour que la première avec la commande export:
quefaurs@Ulysse:~$export LD_LIBRARY_PATH=/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716//runtime/glnxa64:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716//bin/glnxa64:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716//sys/os/glnxa64:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716//sys/java/jre/glnxa64/jre/lib/amd64/native_threads:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716//sys/java/jre/glnxa64/jre/lib/amd64/server:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716//sys/java/jre/glnxa64/jre/lib/amd64/client:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716//sys/java/jre/glnxa64/jre/lib/amd64
si je lance maintenant mon executable ALORS QUE je n’ai pas mis à jour XAPPLRESDIR voilà le message que vous obtiendrez:
quefaurs@Ulysse:~$ ./test11b
Warning: latest version of matlab app-defaults file not found.
Contact your system administrator to have this file installed
Donc on n’est pas cons on va mettre aussi cette variable à jour:
quefaurs@Ulysse:~$export XAPPLRESDIR=/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716//X11/app-defaults
et maintenant suspense …
quefaurs@Ulysse:~$ ./test11b
ça marche!
Trop cool !
Et que ce serait-il passer si on avait fait l’inverse , c’est à dire de ne mettre à jour que la variable XAPPLRESDIR et beh on serait choper le premier message d’erreur error while loading shared libraries: libmwmclmcrrt.so.7.16 … logique vu que je n’ai pas indiqué où se trouvait mon MCR.
- 6ème étape éditer le .bashrc
Bon beh il ne reste plus qu’à balancer ça dans un .bashrc , .cshrc ou .profile comme indiqué dans le … readme.txt!
NOTE: To make these changes persistent after logout on Linux
or Mac machines, modify the .cshrc file to include this
setenv command.
Donc c’est que j’ai fait dans mon .bashrc j’ai rajouté les lignes :
export LD_LIBRARY_PATH=/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716/runtime/glnxa64:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716/bin/glnxa64:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716/sys/os/glnxa64:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716/sys/java/jre/glnxa64/jre/lib/amd64/native_threads:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716/sys/java/jre/glnxa64/jre/lib/amd64/server:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716/sys/java/jre/glnxa64/jre/lib/amd64/client:/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716/sys/java/jre/glnxa64/jre/lib/amd64
export XAPPLRESDIR=/home/quefaurs/data/DOWNLOAD_SERVER/MATLAB/MCR_DEPLOYED/l64/r2011b/v716/X11/app-defaults
j’ai sauvé le fichier , ré-ouvert un terminal et lancé ./test11b et ça a marché ! Tous mes exécutables R2011b peuvent être lancés juste en indiquant leur nom.