J'ai une fonction MEX, disons Maintenant, la mycée est liée à une bibliothèque Maintenant, chaque fois que je change quelque chose dans Remarque: il serait facile de lier la bibliothèque statiquement dans la fonction MEX. Cependant, lorsque je liez la même bibliothèque à travers quelques fichiers MEX, je préférerais conserver ma bibliothèque partagée unique pour réduire les délais de compilation et la redondance des données. P> concernant La discussion que le renvoie une liste avec tous les fichiers MEX chargés. Cette liste ne contient pas la bibliothèque liée, mais uniquement les fichiers MEX elle-même. Utilisation de myfunction.mexmaci64 code> (qui est la fin correcte sur OS X).
mylibrary.dylib code>. MEX-File et Bibliothèque, résident dans le même dossier. P>
mylibrary code>, MATLAB ne rechargne pas la nouvelle version de la bibliothèque, mais utilise plutôt l'ancien jusqu'à ce que je redémarre Matlab. C'est très anoking lors du développement et du débogage des travaux.
Existe-t-il un moyen de forcer Matlab à recharger la bibliothèque sans redémarrer l'application? P>
EDIT: H2>
Clear Mex CODE> aide: p>
Effacer Mex CODE> vide avec succès cette liste, mais ne décharge pas
mylibrary code> - exécutant à nouveau la fonction MEX donne toujours la même sortie que celle avec l'ancienne bibliothèque partagée. p> p>
3 Réponses :
fait CLEE MEX CODE> Faites ce dont vous avez besoin? P>
@Thilo Effacer code> est la bonne réponse, vérifiez la documentation de la syntaxe droite. Essayez
Effacer ABS-PATH-TO-MEX-Fichier Code>. Si rien ne fonctionne, Creusez via le fichier M pour la commande
MEX code> pour voir comment Matlab décharge des fichiers MEX en mémoire lorsque vous recompilez une.
@PRAETORIAN: Clear Mex CODE> fonctionne, mais pas i> Effacer la bibliothèque partagée, mais uniquement le fichier MEX. En fait, je ne pouvais trouver aucune trace dans le
mex.m code> (ou meilleur,
mex_helper.m code>) que les bibliothèques liées sont rechargées (recherche de
décharge code > ou
lib code> ne donne pas de succès significatif).
Pour effacer une bibliothèque de la mémoire, j'ai généralement une bonne chance avec puis si je me sens vraiment militant, je ferai: p> bdclose all; % clear all libraries out of memory ( supposedly )
clear all; % clear all workspace variables, mex, etc. ( supposedly )
rehash; % cause all .m files to be reparsed when invoked again
Thats insularess, bdclose code> est destiné à la fermeture des fenêtres Simulink, rien à voir avec les fichiers MEX (au moins non documenté) ..
Pour moi, bdclose tout; code> semble juste prendre un moment de départ Simulink, mais n'aide pas à recharger le MEX.
Vous pouvez voir quelles bibliothèques partagées sont chargées en faisant:
version('-modules') % test.mexa64 and test.so appear clear test % clear the mex file version('-modules') % both test.mexa64 and test.so no longer appear.
nonchargé () code> être une option? mathworks.de/help/matlab/ref/unloadlibrary.html < / a>
@ H.muster peut-être
nonchargé () code> pourrait aider, oui. Cependant, je ne vois pas comment l'utiliser. L'appelant juste avec le chemin de ma bibliothèque, il suffit de retourner
Impossible de trouver le fichier myLibrary.dylib code>. En outre, la documentation répertorie également la limitation
avec des bibliothèques chargées à l'aide de la fonction LoadLibrary. Code>. Probablement le fichier MEX n'utilise pas
loadlibrary code> (je ne fournis jamais un fichier d'en-tête requis pour
LoadLibrary code>.
@Thilo, je n'ai eu que de traiter de décharger la fonction MEX elle-même, pas des bibliothèques qu'elle références. J'ai supposé que le système d'exploitation le déchargerait pour vous une fois que Matlab a déchargé le fichier MEX. Comment vous connectez-vous à
mylibrary code>? Est-ce que la lieur fait la liaison pour vous (lorsque vous compilez la fonction MEX) ou utilisez-vous
dlopen () code>? Si c'est ce dernier, vous devez appeler
dlclose () code>. Peut-être enregistrer une fonction
mexatexit code> où vous pouvez faire cet appel.
@Thilo:
INMEM code> ne montre que des fonctions MEX chargées dans la mémoire non des dépendances externes. Sous Windows, vous pouvez utiliser
DumpMemM code> pour voir toutes les DLL chargées par MATLAB (y compris la sienne)
Dupliqué possible de Fonction MEX non mise à jour après la récompille . La dernière fois que j'ai enquêté sur cela, je n'ai pas pu reproduire le problème. La conclusion était que la bibliothèque partagée liée ne publie pas toutes ses ressources, est donc restée en mémoire (ou que ce comportement est spécifique à la plate-forme, je l'ai testé sous Windows)
@Amro: Merci pour votre contribution. Il est fort probable que la bibliothèque ne libère pas tout peu de mémoire allouée.
BDClose tout code> fonctionne pour l'instant. Une fois que j'ai un peu plus de temps, je vais enquêter un peu plus loin, cependant. Peut-être qu'un problème de ma bibliothèque est impliqué (que, dans le pire des cas, une cause d'autres problèmes que je ressens lorsque j'utilise la bibliothèque en dehors de Matlab).