用MATLAB引擎连接到已经运行的MATLAB

MATLAB Engine API允许从C程序访问MATLABfunction。 要设置MATLAB引擎会话,需要调用engOpen函数。 默认情况下,这将启动MATLAB的一个新实例,专门用于引擎应用程序。

我想要的是从一个引擎应用程序使用已经运行的 MATLAB会话,所以我可以访问它的variables。 我需要在Linux和OS X上执行此操作。

引擎接口在Windows(使用COM服务器的地方)和Unix上有非常不同的实现。 在Unix上,我们必须将MATLAB可执行文件的位置传递给engOpen ,而在Windows上(引擎使用COM服务器),我们不需要。 在Windows上,可以使用MATLAB for Engine应用程序的现有实例:只需运行enableservice('AutomationServer', true) 。 Unix系统上有没有解决scheme?

我希望有一个通用的解决scheme – 可能没有logging – 因为基于文档,Python接口似乎允许这样做 。 我在OS X上testing了它,它工作。 例如,我可以启动一个交互式的MATLAB会话,设置一个variablesa=5 ,然后启动Python,连接到同一个会话并能够获取这个variables。 也可以连接到已经运行的Java会话。

我需要从C而不是从Python来完成,因为它将用在MATLink ,Mathematica-MATLink接口中。 Python界面如何实现这一目标? 我怎样才能重现相同的使用C?

如果有一个替代C API而不是“MATLAB引擎”,使得这个成为可能(也许是Python接口所基于的一些其他logging或未logging的C API),我可以接受这个答案。 我想要一个可以使用已经运行的交互式 MATLAB会话的C程序。


更新:

一些在Python界面中的插件揭示了它使用了一个名为libmwengine_api的库。 这与logging的MATLAB Engine C API不一样。 我们可以看看这个库中的符号。 在OS X上,

 nm -g libmwengine_api.dylib | c++filt 

然后我们可以谷歌这些符号或grep的MATLAB安装目录中包含它们的文件。 在纯文本中没有任何东西出现。

基于这一点,我相信Python接口使用了一个未经logging的C ++ Engine API,它与旧的,logging在案的C不同。

“在Mac和Linux®平台上,您不能使引擎程序连接到现有的MATLAB会话。”

这里是它的Python 实现的来源,看看它是否可以帮助你。

一些搜索给了我印象, libmwengine是一个图书馆的一部分,用于嵌入式系统,并已经过时了很久。

看到这个链接,库libmwengine_api被废弃了很久。也许这就是为什么它是无证的。