Matlab программно добавляет собственные библиотеки к пути

Фон

У меня есть кодовая база Matlab (или приложение теперь с r2012b), которую я распространяю среди пользователей.

Это приложение использует JNI с собственными библиотеками (несколько файлов .dll). На моем локальном компьютере для этого требуются записи в файле librarypath.txt или javalibrarypath.txt (r2012b), как описано в Mathworks и Недокументированный Matlab.

Вопрос

Есть ли способ программно добавить собственные библиотеки в путь к классу Java Matlab?

Я хотел бы написать скрипт initMyLibrary.m, в котором:

  • Пользователям не нужно изменять эти файлы вручную.
  • Код можно использовать как скомпилированное приложение MCR.
  • Инициализация не уничтожает существующий файл пользователя javalibrarypath.txt.
  • Предположим, что у вас нет прав администратора (невозможно изменить базовую установку Matlab).

Любые идеи?


person supyo    schedule 13.12.2012    source источник


Ответы (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 находится на системном пути, это должно быть хорошо, нет? Не забудьте восстановить путь в конце приложения.

В любом случае, все это может быть немного опасно...

person reverse_engineer    schedule 18.12.2012
comment
Близко, но все еще некоторые проблемы. Переменная $PATH считывается во время запуска, поэтому это будет означать, что в первый раз потребуется перезагрузка. Также потребуется оболочка, которая проверяет, что .dll еще нет на пути. Я планирую оставить вопрос открытым еще немного... - person supyo; 18.12.2012
comment
К сожалению, я отредактировал свой вопрос, не заметив вашего комментария. Да, я думаю, ваши замечания подходят для первой версии моего ответа, но заставит ли это изменение реестра с setx из reg работать? (во всяком случае, для Windows... Системы Unix и Mac могут потребовать некоторых исследований) - person reverse_engineer; 18.12.2012