我有一个Mex函数,叫做
现在,
现在,每当我更改
注意:将该库静态链接到Mex函数中很容易。然而,由于我在许多Mex文件之间链接相同的库,因此我更喜欢保留单个共享库以减少编译时间和数据冗余。
编辑:
关于讨论
myfunction.mexmaci64
(这是在OS X上正确的名称结尾)。现在,
myfunction
链接到库mylibrary.dylib
。两者均位于同一文件夹中。现在,每当我更改
mylibrary
中的内容时,MATLAB不重新加载新的库版本,而是使用旧版本,直到我重新启动MATLAB。这对开发和调试工作来说非常烦人。是否有一种方法可以强制MATLAB重新加载库而不必重启应用程序?注意:将该库静态链接到Mex函数中很容易。然而,由于我在许多Mex文件之间链接相同的库,因此我更喜欢保留单个共享库以减少编译时间和数据冗余。
编辑:
关于讨论
clear mex
是否有帮助:[~, loaded_mexes] = inmem('-completenames'); % get canonica
返回一个包含所有已加载的 mex 文件的列表。该列表不包含链接的库,而只包含 mex 文件本身。使用 clear mex
命令可以成功地清空这个列表,但不会卸载 mylibrary
- 再次运行 mex 函数时,输出结果与旧共享库相同。
unloadlibrary()
是一个选项吗?http://www.mathworks.de/de/help/matlab/ref/unloadlibrary.html - H.Musterunloadlibrary()
可以帮忙。但是,我不知道如何使用它。只是用我的库的路径调用它会返回Could not find file mylibrary.dylib
。此外,文档还列出了限制条件Use with libraries that are loaded using the loadlibrary function.
。可能 mex 文件没有使用loadlibrary
(我从未提供过loadlibrary
所需的头文件)。 - Thilomylibrary
的?编译mex函数时,链接器是否为您绑定了(doing the binding),或者您使用了dlopen()
? 如果是后者,您需要调用dlclose()
。可以注册一个mexAtExit
函数,在其中进行此调用。 - Praetorianinmem
只显示加载在内存中的 MEX 函数,而不是外部依赖项。在 Windows 上,您可以使用feature dumpmem
查看 MATLAB 加载的所有 DLL(包括其自身)。 - Amrobdclose all
可以使用。一旦我有更多时间,我会进一步调查。也许我的库存在问题(最坏的情况可能是我在MATLAB之外使用库时遇到其他问题的原因)。 - Thilo