我正在尝试使用mex(changeanalysis.cpp)编译cpp文件。我在MAC OS X 10.7上有Matlab R2012a,Xcode 4.6。在文件changeanalysis.cpp中,包含aef_global_dllexport.h。 aef_global_dllexport.h的某些部分如下:
////////////////////////
// DLL EXPORT FUNCTIONS
////////////////////////
#define DLLEXPORT _declspec(dllexport)
DLLEXPORT double maha_dist_3D_ex( double x,
double y,
double z,
double* mean,
double** icovm);
DLLEXPORT int matrix_inv_ND_ex( double** matND,
double& det,
int Dim);
DLLEXPORT int matrix_copy3x3_ex( double** x,
double** y);
.
.
.
当我编译文件changeanalysis.cpp时,我在命令提示符处收到以下错误消息:
mex -I“/ Users / marzi / Documents / MATLAB”changeanalysis.cpp
在changeanalysis.cpp中包含的文件中:58:
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:7:错误:在'('token
之前的预期构造函数,析构函数或类型转换/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:13:错误:在'('token
之前的预期构造函数,析构函数或类型转换/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:17:错误:在'('token
之前的预期构造函数,析构函数或类型转换/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:20:错误:在'('token
之前的预期构造函数,析构函数或类型转换/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:22:错误:在'('token
之前的预期构造函数,析构函数或类型转换/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:24:错误:在'('token
之前的预期构造函数,析构函数或类型转换/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:29:错误:在'('token
之前的预期构造函数,析构函数或类型转换/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:31:错误:在'('token
之前的预期构造函数,析构函数或类型转换/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:50:错误:在'('token
之前的预期构造函数,析构函数或类型转换/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:75:错误:'('令牌)之前的预期构造函数,析构函数或类型转换 /Users/marzi/Documents/MATLAB/aef_global_dllexport.h:100:错误:在'('token
之前的预期构造函数,析构函数或类型转换mex:编译'“changeanalysis.cpp”'失败。
使用mex时出错(第206行) 无法成功完成。
有谁知道如何修复此错误或导致此错误的原因是什么?
感谢。
答案 0 :(得分:0)
您正在使用Windows表示法来声明导出的函数。您使用的符号应取决于平台。如果您执行此操作,则可以跨平台兼容:
#if defined _WIN32 || defined __CYGWIN__ || defined __MINGW32__
#ifdef BUILDING_DLL
#ifdef __GNUC__
#define DLL_PUBLIC __attribute__ ((dllexport))
#else
#define DLL_PUBLIC __declspec(dllexport) // Note: actually gcc seems to also supports this syntax.
#endif
#else
#ifdef __GNUC__
#define DLL_PUBLIC __attribute__ ((dllimport))
#else
#define DLL_PUBLIC __declspec(dllimport) // Note: actually gcc seems to also supports this syntax.
#endif
#endif
#define DLL_LOCAL
#else
#if __GNUC__ >= 4
#define DLL_PUBLIC __attribute__ ((visibility ("default")))
#define DLL_LOCAL __attribute__ ((visibility ("hidden")))
#else
#define DLL_PUBLIC
#define DLL_LOCAL
#endif
#endif