Matlab以编程方式将本机库添加到路径
Posted
技术标签:
【中文标题】Matlab以编程方式将本机库添加到路径【英文标题】:Matlab add native libraries to path programmatically 【发布时间】:2012-12-13 17:31:56 【问题描述】:背景
我有一个 Matlab 代码库(或 App 现在使用 r2012b),我将其分发给用户。
这个应用程序使用 JNI 和原生库(几个 .dll 文件)。在我的本地计算机上,这需要 librarypath.txt 或 javalibrarypath.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 是否不在路径上。我打算把这个问题留待更长时间...... 抱歉,我在没有注意到您的评论的情况下编辑了我的问题。是的,我想您的评论对于我的答案的第一个版本是正确的,但是用setx
的reg
更改注册表可以让它工作吗? (无论如何,对于 Windows...Unix 和 mac 系统可能需要一些研究)以上是关于Matlab以编程方式将本机库添加到路径的主要内容,如果未能解决你的问题,请参考以下文章