Я пытаюсь скомпилировать файл cpp, используя mex (changeanalysis.cpp). У меня есть Matlab R2012a, Xcode 4.6 на MAC OS X 10.7. В файле 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 «/ Пользователи / marzi / Documents / MATLAB» changeanalysis.cpp
В файле, включенном из changeanalysis.cpp: 58:
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:7: ошибка: ожидаемый конструктор, деструктор или преобразование типов перед символом ‘(‘
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:13: ошибка: ожидаемый конструктор, деструктор или преобразование типов перед символом ‘(‘
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:17: ошибка: ожидаемый конструктор, деструктор или преобразование типов перед символом ‘(‘
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:20: ошибка: ожидаемый конструктор, деструктор или преобразование типов перед символом ‘(‘
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:22: ошибка: ожидаемый конструктор, деструктор или преобразование типа перед символом ‘(‘
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:24: ошибка: ожидаемый конструктор, деструктор или преобразование типов перед символом ‘(‘
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:29: ошибка: ожидаемый конструктор, деструктор или преобразование типов перед символом ‘(‘
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:31: ошибка: ожидаемый конструктор, деструктор или преобразование типов перед символом ‘(‘
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:50: ошибка: ожидаемый конструктор, деструктор или преобразование типов перед символом ‘(‘
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:75: ошибка: ожидаемый конструктор, деструктор или преобразование типа перед символом ‘(‘
/Users/marzi/Documents/MATLAB/aef_global_dllexport.h:100: ошибка: ожидаемый конструктор, деструктор или преобразование типов перед символом ‘(‘
mex: не удалось скомпилировать changeanalysis.cpp.
Ошибка при использовании mex (строка 206)
Невозможно завершить успешно.
Кто-нибудь знает, как это исправить или в чем причина этой ошибки?
Благодарю.
Вы используете нотацию 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