vs2013 Matlab引擎 丢失libeng.dll
2015-06-26 07:58
351 查看
最近尝试使用C++调用Matlab引擎。编程环境为:vs2013 Matlab R2012b
在vs2013中配置好项目属性后(具体实现参见上一篇文章《配置vs2013
编辑mex文件》),链接的时候总是提示:丢失*.dll 文件。
尝试解决办法:
但是在执行上述操作之后仍然提示*.dll文件丢失,这是很可能是因为环境变量的修改没有生效,需要重启电脑,重启之后我成功解决 问题
在链接的时候需要使用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文件包含内容
在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文件包含内容
相关文章推荐
- sequential minimal optimization,SMO for SVM, (MATLAB code)
- PCA (主成分分析)详解 (写给初学者) 结合matlab
- caffe windows Matlab
- [Matlab]提高程序运行效率的方法[转]
- Matlab与C++混合编程(依赖OpenCV)
- MATLAB GUI界面总结(转载)
- CVX: Matlab Software for Disciplined Convex Programming
- matlab使用imhist、plot、fill画可填充颜色连续直方图
- Matlab中判断两个矩阵是否相等
- Matlab中plot函数全功能解析
- Matlab数值计算差商与插值
- matlab乘与点乘的区别 (*与.* ^与.^)
- matlab中用imshow()显示double类型图像中出现的问题
- matlab中norm函数的用法
- matlab echo 的用法
- 实验二:FFT算法的MATLAB实现
- 实验一 离散时间序列卷积和MATLAB实现
- Huffman编码用MTLAB的实现及编码注释----------Matlab
- MIMO信道容量及注水算法---------Matlab
- MATLAB实用源代码