强制MATLAB重新加载mex函数中链接的库

时间:2013-06-25 11:55:36

标签: matlab mex

我有一个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函数仍会产生与旧共享库相同的输出。

3 个答案:

答案 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.