最近使用matlab2018a,自己编写.m文件,并生成C++库,目的是为了让QT调用自己写的matlab库,QT版本为5.14.0
这是我的matlab中.m文件中的代码,文件名为add.m
function a = add(b, c)
a = b + c;
end
文件这几行代码,保存为.m文件,编译环境选择了MinGW,和QT编译环境相同,使用matlab生成了C++库,如下图
生成该库时,会自动生成add.h add.dll add.lib文件,matlab会自动生成addInitialize函数和addTerminate函数,意义为初始化和结束,代码如下
//
// MATLAB Compiler: 6.6 (R2018a)
// Date: Tue Dec 14 18:08:23 2021
// Arguments:
// "-B""macro_default""-W""cpplib:add,all""-T""link:lib""-d""C:\Users\chenyuan\D
// esktop\add\for_testing""-v""C:\Users\chenyuan\Desktop\add.m"
//
#ifndef __add_h
#define __add_h 1
#if defined(__cplusplus) && !defined(mclmcrrt_h) && defined(__linux__)
# pragma implementation "mclmcrrt.h"
#endif
#include "mclmcrrt.h"
#include "mclcppclass.h"
#ifdef __cplusplus
extern "C" {
#endif
/* This symbol is defined in shared libraries. Define it here
* (to nothing) in case this isn't a shared library.
*/
#ifndef LIB_add_C_API
#define LIB_add_C_API /* No special import/export declaration */
#endif
/* GENERAL LIBRARY FUNCTIONS -- START */
extern LIB_add_C_API
bool MW_CALL_CONV addInitializeWithHandlers(
mclOutputHandlerFcn error_handler,
mclOutputHandlerFcn print_handler);
extern LIB_add_C_API
bool MW_CALL_CONV addInitialize(void);
extern LIB_add_C_API
void MW_CALL_CONV addTerminate(void);
extern LIB_add_C_API
void MW_CALL_CONV addPrintStackTrace(void);
/* GENERAL LIBRARY FUNCTIONS -- END */
/* C INTERFACE -- MLX WRAPPERS FOR USER-DEFINED MATLAB FUNCTIONS -- START */
extern LIB_add_C_API
bool MW_CALL_CONV mlxAdd(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[]);
/* C INTERFACE -- MLX WRAPPERS FOR USER-DEFINED MATLAB FUNCTIONS -- END */
#ifdef __cplusplus
}
#endif
/* C++ INTERFACE -- WRAPPERS FOR USER-DEFINED MATLAB FUNCTIONS -- START */
#ifdef __cplusplus
/* On Windows, use __declspec to control the exported API */
#if defined(_MSC_VER) || defined(__MINGW64__)
#ifdef EXPORTING_add
#define PUBLIC_add_CPP_API __declspec(dllexport)
#else
#define PUBLIC_add_CPP_API __declspec(dllimport)
#endif
#define LIB_add_CPP_API PUBLIC_add_CPP_API
#else
#if !defined(LIB_add_CPP_API)
#if defined(LIB_add_C_API)
#define LIB_add_CPP_API LIB_add_C_API
#else
#define LIB_add_CPP_API /* empty! */
#endif
#endif
#endif
extern LIB_add_CPP_API void MW_CALL_CONV add(int nargout, mwArray& a, const mwArray& b, const mwArray& c);
/* C++ INTERFACE -- WRAPPERS FOR USER-DEFINED MATLAB FUNCTIONS -- END */
#endif
#endif
通过网上所查资料,修改QT的.pro文件,将该matlab库链接到了QT上,并开始调用上面.m文件中的add函数,编译出现错误,错误如下图
在网上查了很久,最后得出结论为链接库未成功的问题,于是,我把链接库的代码注释掉,如下图:
再次编译:
可以发现,addInitialize函数和addTerminate函数调用也失败了,所以我认为,我应该成功的链接上库了,但为什么只有我自己写的add函数不生效呢,请问大家有遇到过类似的问题吗,麻烦解答一下,谢谢啦!