我试图从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运行起来?
浏览该图书馆的网页,它会似乎这些DLL都只是旧的形式 MEX文件。
因此,他们不应该在共享库的情况下(例如,使用用于loadlibrary
和calllib
),而是直接编译成MEX文件。
要做到这一点,我建议以下步骤:
请确保您有配置为您的MATLAB工作MEX编译器。
在MATLAB中,键入:
>> mex -setup
这将引导您完成配置过程。 据我所知,您在Windows机器上工作,我通常与Visual Studio编译器的工作 - 最适合我。
这图书馆的README文件显示,OSC
需要liblo 0.22或更高版本。 见http://plugin.org.uk/liblo/
请确保你有这样的库,它位于你LD_LIBRARY_PATH
(见例如, 这个问题的详细信息,或MEX文档 )。
从获取OSC库的源代码的存储库 。
使用编译源代码在Matlab
>> mex -O -largeArrayDims osc_free_address.c >> mex -O -largeArrayDims osc_free_server.c
等所有7 C源文件。 之后MEX-ING的C文件你有,你可以从MATLAB就好像它们是常规功能运行MEX文件。
你可能会发现使用图书馆的make文件 ,由安德鲁·毛的建议。
祝好运,
如果你看一下在构建该软件,它被编译MEX文件,而不是DLL文件(共享库): http://sourceforge.net/p/oscmex/code/4/tree/trunk/src/osc_make.m 。
我会尝试使用MEX指令,而不是DLL命令(可能是文件只是名不副实。)更妙的是,我会自己编译的文件与MEX使用构建文件来源。
请注意,说明也说,你才能运行库需要liblo-0.22,所以请确保您有访问以及。
我看了看你的OSC工具包。 他们似乎已经被MATLAB MEX编译。 但是,这不是因为他们已建成哪种结构的提及。 您可以键入mexext
在MATLAB命令提示符下,找到扩展您的MATLAB MEX文件。 然后,更改DLL扩展到给定的扩展。 如果原始MEX与您的MATLAB兼容,该DLL可以很容易地通过MATLAB访问。 只要确保将文件夹添加到您的MATLAB路径。
尝试改变延伸部从.DLL到.mexw32(在Win32),或.wexw64(在Win64的)。 这是一个长镜头,但它可能工作。
共享库不能被直接使用。 正如你所提到的,则需要使用它们加载到MATLAB loadlibrary
。 根据该文件, loadlibrary
需要两个参数(至少)。 第一个参数是该文件的名称,而第二个是标题文件,它包含的功能和外部变量的定义。 如果你不提供头文件,在MATLAB查找具有相同名称作为DLL的文件。 说了这么多,你需要有访问头文件,或者至少,如果你知道函数如何样子,你需要写的DLL头。
我曾与在MATLAB中的DLL工作。 在MATLAB只要DLL关注是不是很人性化。 特别是,如果DLL比C(或C ++)之外的其他语言编写的,你会遇到麻烦装载功能到MATLAB。
此外,MATLAB只支持某些特定的DLL。 根据,你的MATLAB的版本,你需要找出共享库是否被通过MATLAB支持。 看看这里
简单地说,这是不容易的DLL加载到MATLAB。 你需要有从DLL的一些信息。