您的位置:首页 > 编程语言 > MATLAB

vs2013 Matlab引擎 丢失libeng.dll

2015-06-26 07:58 351 查看
最近尝试使用C++调用Matlab引擎。编程环境为:vs2013 Matlab R2012b

在vs2013中配置好项目属性后(具体实现参见上一篇文章《配置vs2013
编辑mex文件》),链接的时候总是提示:丢失*.dll 文件。

尝试解决办法:

将$MatlabRoot\bin\win32添加到环境变量path中

查阅资料发现windows在搜索path变量下的路径时不会搜索路径下的子文件夹的,恰好我的path变量下只记录了$MatlabRoot\bin文件夹的路径所以系统找不到$MatlabRoot\bin\win32下的dll文件,而恰好我们丢失的是$MatlabRoot\bin\win32目录下的dll,所以解决办法就是将$MatlabRoot\bin\win32添加到path环境变量中。

但是在执行上述操作之后仍然提示*.dll文件丢失,这是很可能是因为环境变量的修改没有生效,需要重启电脑,重启之后我成功解决 问题

拓展:在使用了lib、dll的项目中

编译文件的时候只需要.h头文件,不需要lib文件以及dll文件,因为编译文件的时候只需要知道符号(函数,全局变量等)的类型、大小而不需要知道函数的位置、实现。vs2013中单独编译文件:Build-〉Compile(Ctrl+F7)

在链接的时候需要使用lib文件,对于静态的lib文件,它是obj文件的集合而obj文件是需要链接的;对于动态的lib文件,它是一个导引文件,他指出了dll文件中包含的解析符号的名称、解析符号对应的obj文件位置、解析符号在对应的obj中的位置。有了这些信息,链接程序就能解析其他obj文件中待解析符号的地址,实现链接

在程序执行的时候才需要dll文件

lib文件中并未包含dll文件的位置信息,dll文件是由系统调用的,所以要成功使用dll文件必须告诉系统dll的位置:系统会自动搜索

a. 应用程序所在目录;

b. 当前目录。GetCurrentDirectory返回的目录;

c. 系统目录。 GetSystemDirectory 返回的目录,通常是系统盘\Windows\System32;

d. 32位系统目录。该项只是为了向前兼容的处理,可以不考虑;

e. Windows目录。 GetWindowsDirectory 返回的目录,通常是系统盘 \Windows ;

f. 环境变量PATH中所有目录。

链接的时候,vs的链接器不会主动链接自带动态库以外的lib文件,所以如果我们要链接自定义的动态库如Matlab的动态库libeng.lib,我们需要告诉链接器,这就是为什么我们要在附加依赖项(Additional dependencies)中指定libeng.lib;libmat.lib;libmex.lib;libmx.lib;的原因。当然链接的时候链接器会自动查找动态库,查找方式跟dll相同,同时还可以在vs的Linker->General->Additional
Library Directories 中指定lib文件搜索路径。

链接:Windows下DLL查找顺序

lib文件包含内容
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: