9

比如说,我有一个 Mex 功能myfunction.mexmaci64(这是 OS X 上的正确结尾)。

现在, myfunction 与 library 链接mylibrary.dylib。mex 文件和库都位于同一个文件夹中。

现在,每当我更改某些内容时mylibrary,MATLAB 不会重新加载新的库版本,而是使用旧版本,直到我重新启动 MATLAB。在进行开发和调试工作时,这是非常令人讨厌的。有没有办法强制 MATLAB 在不重新启动应用程序的情况下重新加载库?

注意:将库静态链接到 mex 函数会很容易。但是,由于我在很多 mex 文件中链接同一个库,我宁愿保留我的单个共享库以减少编译时间和数据冗余。

编辑:

关于讨论是否有clear mex帮助:

[~, loaded_mexes] = inmem('-completenames'); % get canonica

返回一个包含所有加载的 mex 文件的列表。此列表不包含链接库,而仅包含 mex 文件本身。使用clear mex成功清空此列表,但不会卸载mylibrary- 再次运行 mex 函数仍会产生与旧共享库相同的输出。

4

3 回答 3

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
于 2013-06-25T13:33:53.527 回答
1

clear mex你需要的吗?

于 2013-06-25T12:20:03.080 回答
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.
于 2013-12-05T18:14:04.620 回答