Подключитесь к уже запущенному MATLAB с помощью Matlab Engine
API движка MATLAB позволяет получить доступ к функциональности MATLAB из программы C. Чтобы настроить сеанс движка MATLAB, вызывается engOpen
. По умолчанию это запускает новый экземпляр MATLAB для исключительного использования приложений Engine.
Я хочу использовать уже работает сеанс MATLAB из Приложения Engine, чтобы я мог получить доступ к его переменным. мне нужно сделать это на Linux и OS Х.
интерфейс движка имеет очень разные реализации в Windows (где он использует COM-сервер) и Unix. В Unix мы должны передать местоположение исполняемого файла MATLAB в engOpen
, в то время как в Windows (где движок использует COM-сервер) мы этого не делаем. На Windows это is можно использовать существующий экземпляр MATLAB для приложений двигателя: просто запустите enableservice('AutomationServer', true)
. Есть ли какое-либо решение в системах Unix?
Я надеюсь, что есть общее решение-возможно, недокументированное-потому что,основываясь на документации, интерфейс Python, похоже, позволяет это. Я тестировал это на OS X, и это работает. Я могу, например, запустить интерактивный сеанс MATLAB, установить переменную a=5
, затем запустите Python, connect на той же сессии и иметь возможность получить эту переменную. также можно подключиться к уже запущенному сеансу с Java.
мне нужно сделать это из C однако, не из Python, так как он будет использоваться в MATLink, интерфейс Mathematica-MATLink. Как интерфейс Python достигает этого? Как я могу воспроизвести то же самое с помощью C?
если есть альтернативный C API, чем "Matlab Engine", который делает это возможным (возможно, какой-то другой документированный или недокументированный C API, на котором основан интерфейс Python), я могу принять это как ответ. Я хочу программу C, которая может использовать уже запущенную интерактивные сеанс MATLAB.
обновление:
некоторые ковыряться в интерфейсе Python показывает, что он использует библиотеку под названием libmwengine_api
. Это не то же самое, что документированный Matlab Engine C API. Мы можем посмотреть на символы в этой библиотеке. На OS X,
nm -g libmwengine_api.dylib | c++filt
затем мы можем google для этих символов или grep каталог установки MATLAB для файлов, содержащих их. В обычном тексте ничего нет что поворачивает вверх.
основываясь на этом, я считаю, что интерфейс Python использует недокументированный API C++ Engine, который отличается от старого, документированного C.
2 ответов
вот источник его Python реализация, посмотрим, поможет ли это вам.
некоторые поиски дали мне впечатление, что libmwengine
является частью библиотеки, которая используется во встроенной системе и которая давно устарела.
посмотреть этой ссылке , библиотека libmwengine_api
устарел давно.Может быть, поэтому он не документирован.