MATLAB链接到DLL库(Linking MATLAB to a DLL library)

2019-07-19 15:47发布

我试图从MATLAB工具箱执行一些示例代码,“ oscmex ”。 该工具包允许使用在MATLAB振荡协议通信。 我相信这个问题是不特定的; 它应适用于所建立的方式,这是一个任何工具。

原因不谈,我有一些简单的麻烦的工具包和运行。 该工具包带有没有任何文件; 只是一组六个DLL文件(在一个目录下),和一组四个MATLAB“.M”示例代码文件(在另一个目录)。 我已经在过去使用的每个工具包,或者已被内置套件或已直观(半自动)安装程序。

下载工具包后,我尝试的第一件事是简单地运行的“.M”例如代码之一。 这个失败,因为该代码的第一行包含由MATLAB识别的功能OSC(),这是不(目前)。

所以,我想也许我需要的“.M”文件移动到同一文件夹中的DLL; 也许MATLAB会看到这些DLL中的函数。 没有骰子。

所以,我意识到,我必须以某种方式连接到MATLAB的DLL文件在启动时。 我尝试添加该DLL文件到一个文件夹并添加在“pathdef.m”文件中的条目了这一点。 这也失败了。

我读的地方,我可以通过使用LoadLibrary()函数加载DLL文件。 于是,我试着这样做的DLL文件。 这种失败的第一个文件:

>> loadlibrary('osc_free_address.dll')

Error using loadlibrary>lFullPath (line 587)
Could not find file osc_free_address.h.

我开始跑出来的选择......我怎样才能得到这组DLL运行起来?

Answer 1:

浏览该图书馆的网页,它会似乎这些DLL都只是旧的形式 MEX文件。
因此,他们应该在共享库的情况下(例如,使用用于loadlibrarycalllib ),而是直接编译成MEX文件。

要做到这一点,我建议以下步骤:

  1. 请确保您有配置为您的MATLAB工作MEX编译器。
    在MATLAB中,键入:

     >> mex -setup 

    这将引导您完成配置过程。 据我所知,您在Windows机器上工作,我通常与Visual Studio编译器的工作 - 最适合我。

  2. 这图书馆的README文件显示,OSC

    需要liblo 0.22或更高版本。 见http://plugin.org.uk/liblo/

    请确保你有这样的库,它位于你LD_LIBRARY_PATH (见例如, 这个问题的详细信息,或MEX文档 )。

  3. 从获取OSC库的代码的存储库 。

  4. 使用编译源代码在Matlab

     >> mex -O -largeArrayDims osc_free_address.c >> mex -O -largeArrayDims osc_free_server.c 

    等所有7 C源文件。 之后MEX-ING的C文件你有,你可以从MATLAB就好像它们是常规功能运行MEX文件。
    你可能会发现使用图书馆的make文件 ,由安德鲁·毛的建议。

祝好运,



Answer 2:

如果你看一下在构建该软件,它被编译MEX文件,而不是DLL文件(共享库): http://sourceforge.net/p/oscmex/code/4/tree/trunk/src/osc_make.m 。

我会尝试使用MEX指令,而不是DLL命令(可能是文件只是名不副实。)更妙的是,我会自己编译的文件与MEX使用构建文件来源。

请注意,说明也说,你才能运行库需要liblo-0.22,所以请确保您有访问以及。



Answer 3:

我看了看你的OSC工具包。 他们似乎已经被MATLAB MEX编译。 但是,这不是因为他们已建成哪种结构的提及。 您可以键入mexext在MATLAB命令提示符下,找到扩展您的MATLAB MEX文件。 然后,更改DLL扩展到给定的扩展。 如果原始MEX与您的MATLAB兼容,该DLL可以很容易地通过MATLAB访问。 只要确保将文件夹添加到您的MATLAB路径。



Answer 4:

尝试改变延伸部从.DLL到.mexw32(在Win32),或.wexw64(在Win64的)。 这是一个长镜头,但它可能工作。



Answer 5:

共享库不能被直接使用。 正如你所提到的,则需要使用它们加载到MATLAB loadlibrary 。 根据该文件, loadlibrary需要两个参数(至少)。 第一个参数是该文件的名称,而第二个是标题文件,它包含的功能和外部变量的定义。 如果你不提供头文件,在MATLAB查找具有相同名称作为DLL的文件。 说了这么多,你需要有访问头文件,或者至少,如果你知道函数如何样子,你需要写的DLL头。

我曾与在MATLAB中的DLL工作。 在MATLAB只要DLL关注是不是很人性化。 特别是,如果DLL比C(或C ++)之外的其他语言编写的,你会遇到麻烦装载功能到MATLAB。

此外,MATLAB只支持某些特定的DLL。 根据,你的MATLAB的版本,你需要找出共享库是否被通过MATLAB支持。 看看这里

简单地说,这是不容易的DLL加载到MATLAB。 你需要有从DLL的一些信息。



文章来源: Linking MATLAB to a DLL library
标签: matlab dll