我有一个Mex函数,比如myfunction.mexmaci64
(这是OS X的正确结尾)。
现在,myfunction与库mylibrary.dylib
相关联。 mex文件和库都位于同一文件夹中。
现在,每当我在mylibrary
中更改某些内容时,MATLAB都不会重新加载新的库版本,而是使用旧版本,直到我重新启动MATLAB。在进行开发和调试工作时,这非常有用。
有没有办法强制MATLAB重新加载库而不重新启动应用程序?
注意:将库静态链接到mex函数很容易。但是,当我将相同的库链接到相当多的mex文件时,我宁愿保留我的单个共享库以减少编译时间和数据冗余。
关于讨论,clear mex
有助于:
[~, loaded_mexes] = inmem('-completenames'); % get canonica
返回包含所有已加载的mex文件的列表。此列表不包含链接库,但仅包含mex文件本身。使用clear mex
成功清空此列表,但不卸载mylibrary
- 再次运行mex函数仍会产生与旧共享库相同的输出。
答案 0 :(得分:5)
要从记忆中清除图书馆,我通常会有很好的运气
bdclose all;
然后,如果我真的感觉好战,我会这样做:
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
答案 1 :(得分:1)
clear mex
能做你需要的吗?
答案 2 :(得分:0)
您可以通过执行以下操作来查看加载的共享库:
version('-modules')
通过执行
,我成功卸载了mex文件和(它所依赖的共享库) 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.