Matlab以编程方式将本机库添加到路径

Posted

技术标签:

【中文标题】Matlab以编程方式将本机库添加到路径【英文标题】:Matlab add native libraries to path programmatically 【发布时间】:2012-12-13 17:31:56 【问题描述】:

背景

我有一个 Matlab 代码库(或 App 现在使用 r2012b),我将其分发给用户。

这个应用程序使用 JNI 和原生库(几个 .dll 文件)。在我的本地计算机上,这需要 librarypath.txtjavalibrarypath.txt (r2012b) 文件中的条目,如 Mathworks 和 Undocumented Matlab 所述。

问题

有没有办法以编程方式将本机库添加到 Matlab java 类路径?

我想编写一个 initMyLibrary.m 脚本,其中:

用户不必手动修改这些文件。 该代码可用作已编译的 MCR 应用程序。 init 不会破坏用户现有的 javalibrarypath.txt。 假设没有管理员权限(不能修改 Matlab 基础安装)。

有什么想法吗?

【问题讨论】:

【参考方案1】:

这可能很麻烦,而且我不是这方面的专家,但在你的 initMyLibrary.m 中不会有这样的事情:

currentdir = pwd; % or any other directory you know the dll will be in
if ispc
    system(['setx path "%path%;' currentdir '"']); % only works from windows 7 onwards though, for xp or vista youll have to change the registry with reg
elseif isunix
    system(['export PATH=$PATH:' currentdir]); % dont know if this works without admin rights though...
elseif ismac
    % for mac I dont know how to do this without admin rights
else
    error('whatever') % error handling
end

因为我认为如果您的 dll 在系统路径上,这应该没问题,不是吗?不要忘记在应用程序结束时恢复路径。

不管怎样,这一切都可能有点危险......

【讨论】:

关闭但仍有一些挑战。 $PATH 变量是在启动期间读取的,因此这意味着它第一次需要重新启动。它还需要一个包装器来检查 .dll 是否不在路径上。我打算把这个问题留待更长时间...... 抱歉,我在没有注意到您的评论的情况下编辑了我的问题。是的,我想您的评论对于我的答案的第一个版本是正确的,但是用setxreg 更改注册表可以让它工作吗? (无论如何,对于 Windows...Unix 和 mac 系统可能需要一些研究)

以上是关于Matlab以编程方式将本机库添加到路径的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式将标记 (UIControl) 添加到 UITextField 或 SearchBar?

以编程方式将所有脏文件保存在 MatLab 中

以编程方式在SharePoint文档库中添加/创建新文档

使用 upnp 以编程方式将端口转发条目添加到路由器中?

如何以编程方式将视图从XML添加到布局?

以编程方式确定 SVG 路径生成的形状