|
20Qter豆
本帖最后由 吴雨辰 于 2016-6-22 20:41 编辑
之前在论坛里找到过一个前辈写过的关于qt和matlab混合编程的资料,是通过qt调用matlab的.m脚本文件生成的动态库(显示和隐式调用)以及生成的.exe文件,讲的也很详细,根据他的教程在我的环境下(win8.1 qt5.3.2 matlab2012b)也成功的重现了,但是这个demo是不需要传递参数给动态库的,也不需要参数返回;于是我自己写了一个简单的y=a+b的.m脚本文件,按照之前的教程又来了一遍,到调用函数之前一切都okay。但是由于有参数的传递和返回,我们就需要借助mxArray(一个matlab能识别的参数类型)来传递参数和接收返回值:其写法也是参考网上的,如下所示:
double _x[5 = {1, 2}; //输入数组 ---------------------------------------------------------------------------------------------------------
double _y[5]; //输出数组
mxArray* x = mxCreateDoubleMatrix(1, 2, mxREAL);//创建1*5矩阵
memcpy(mxGetPr(x), (void*)_x, sizeof(_x)); //拷贝输入数据
mxArray* y = mxCreateDoubleMatrix(1, 5, mxREAL);//创建1*5矩阵
ZAdd(1, &y,2,x); // 执行功能函数,即m文件里的函数
memcpy(_y, mxGetPr(y), sizeof(_y));//拷贝输出数据
但当编译的时候会报如下的错:
E:\Software_Practice\QtProject\Test3MatlabWithQT\mainwindow.cpp:45: error: undefined reference to `mxCreateDoubleMatrix_730_proxy(unsigned int, unsigned int, mxComplexity)'
E:\Software_Practice\QtProject\Test3MatlabWithQT\mainwindow.cpp:46: error: undefined reference to `mxGetPr_proxy(mxArray_tag const*)'
....
如果把以上都注释掉,其他部分都正常,动态库的加载,动态库函数指针的获取都没问题(我用的是动态库的显示调用)...
自己也查了好久,但他们说的库我都添加了的,pro文件如下所示:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = Test3MatlabWithQTTEMPLATE = app
SOURCES += main.cpp\ mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.uiDEFINES += __LCC__
INCLUDEPATH += E:/matlab2012B/extern/include
INCLUDEPATH += E:/matlab2012B/extern/include/win32
LIBS += -LE:/matlab2012B/extern/lib/win32/microsoft -llibmx
LIBS +=-LE:/matlab2012B/extern/lib/win32/microsoft -llibeng
LIBS +=-LE:/matlab2012B/extern/lib/win32/microsoft -llibmat
LIBS +=-LE:/matlab2012B/extern/lib/win32/microsoft -lmclmcr
LIBS +=-LE:/matlab2012B/extern/lib/win32/microsoft -lmclmcrrt
LIBS +=-LE:/matlab2012B/extern/lib/win32/microsoft -llibmex
OTHER_FILES += \ dllZAdd.dll
跪求过来人指导一下,已经找了好几天的原因了:(
谢谢~
|
|