Подключитесь к уже запущенному 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 устарел давно.Может быть, поэтому он не документирован.