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

背景

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

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

问题

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

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

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

有什么想法吗?

【问题讨论】:

    标签: matlab matlab-deployment


    【解决方案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 系统可能需要一些研究)
    猜你喜欢
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    相关资源
    最近更新 更多