当我用engOpen()
调用MATLAB的引擎时,我试图弄清楚为什么我的C/C++程序会崩溃。下面的代码打印Hello World
,然后抛出一个APPCRASH
。
是什么导致了这次崩溃,或者如何从这里进行调试?
testMATLAB.c
#include <stdio.h>
#include "engine.h"
int main(){
printf("Hello World.\n");
Engine *ep;
if (!(ep = engOpen(NULL))) {
printf("Can't start MATLAB engine\n");
} else {
printf("Opening Matlab Engine\n");
}
return 0;
}
更多细节
我正在使用:
为了回应一些现有的这样的问题,我有
C:\Program Files\MATLAB\R2012a\extern\lib\win64\microsoft\libeng.lib
和C:\Program Files\MATLAB\R2012a\extern\lib\win64\microsoft\libmx.lib
。C:\Program Files\MATLAB\R2012a\bin\win64
,其中包含libengine.dll
和libmx.dll
matlab /regserver
注意,如果我将engOpen()
放置在未执行的if
语句中,则代码将运行到完成。
我也不认为这是与生俱来的混合,因为在32位WinXP机器上,我没有问题使用Matlab2011与mingw32
。
编译器和链接器输出位于http://pastebin.com/z9CAsb6X
发布于 2013-04-24 05:47:28
你是如何连接*.lib的?在我的项目中,我使用PostgreSQL,而不是链接提供的MSVC编译的*.lib,而是将其转换为*.a。我想这是个类似的程序:
发布于 2013-06-30 21:51:10
我直接使用这些DLL
链接,而不是使用lib文件链接,比如:libeng.dll, libut.dll, libmex.dll and libmat.dll
。
我的设置是MinGW 4.8.1 64bit, Win7 64bit, Matlab 64bit
。
对我来说很管用。
发布于 2014-04-15 02:16:16
我在使用Visual时也遇到了类似的问题。我认为这与Matlab 64位关闭后处理警告的方式有关。我不得不补充:(Mathworks解决了我的问题)
warning('off','MATLAB:ClassInstanceExists') % Add this line
对于我的matlab代码,这可能意味着有一些matlab类在我的代码中并不是真正需要的,但是matlab编译器仍然想要找到吗?(我猜.)
如果这不能直接工作,您可能想要禁用更多的警告?
https://stackoverflow.com/questions/16175054
复制