2014-01-13 2 views
0

Я пытаюсь выполнить файл .cc в mex, и я использую команду mex filename в Matlab. Мой компилятор [1] Lcc-win32 C 2.4.1 в C: \ PROGRA ~ 1 \ MATLAB \ R2012b \ sys \ lcc.с ошибками при компиляции файла .cc в mex в Matlab

Однако, есть некоторые ошибки:

lcc preprocessor error: learn.cc:5 Could not find include file <sys/time.h> 
Error learn.cc: 70 illegal statement termination 
Error learn.cc: 70 skipping `int' 
Error learn.cc: 70 undeclared identifier `alen' 
Error learn.cc: 71 illegal statement termination 
Error learn.cc: 71 skipping `int' 
Error learn.cc: 71 undeclared identifier `blen' 
Error learn.cc: 87 invalid struct field declarations 
Error learn.cc: 87 syntax error; found `collapsed' expecting `}' 
Error learn.cc: 87 skipping `collapsed' `*' `x' 
Error learn.cc: 93 unrecognized declaration 
Warning learn.cc: 93 empty declaration 
Error learn.cc: 97 undefined size for `incomplete struct timeval defined at learn.cc 97 tp' 
Error learn.cc: 99 unknown field `tv_usec' of `incomplete struct timeval defined at learn.cc 97' 
Error learn.cc: 102 syntax error; found `double' expecting `;' 
Error learn.cc: 103 syntax error; found `double' expecting `;' 
Error learn.cc: 106 missing parameter type 
Error learn.cc: 106 syntax error; found `X' expecting `)' 
Error learn.cc: 106 skipping `X' `,' 
Error learn.cc: 106 syntax error; found `double' expecting `{' 
Error learn.cc: 106 missing identifier 
Error learn.cc: 106 too many errors 

Я предполагаю, что причина первой ошибки в том, что нет time.h файла в папке SYS. Вместо этого есть файл timeb.h. Но я не знаю причины следующих ошибок.

Вот некоторые относительные коды:

line 70  int alen = **((int **)a); 
line 71  int blen = **((int **)b); 
line 86-93 struct data { 
    collapsed *x; 
    int num; 
    int numblocks; 
    int *blocksizes; 
    float *regmult; 
    float *learnmult; 
}; 
line 96-100 void seed_time() { 
struct timeval tp; 
check(gettimeofday(&tp, NULL) == 0); 
srand48((long)tp.tv_usec); 
} 
line 102 static inline double min(double x, double y) { return (x <= y ? x : y); } 
line 103 static inline double max(double x, double y) { return (x <= y ? y : x); } 

Может кто-нибудь дать мне подсказку?

+0

'sys/time.h' в не-портативном файле заголовка Unix/Linux, недоступном для Windows ... Вероятно, остальная часть ошибки вызваны неопределенными типами из этого файла заголовка. – Amro

+0

вы можете посмотреть на использование компиляторов Cygwin/MinGW GCC на Windows, но это совершенно другая история :) – Amro

ответ

0

Насколько я могу судить, нет ничего плохого в линиях 70,71. Являются ли a, b целыми двойными массивами, объявленными и выделенными примерно так:

int ** a = malloc(4 * sizeof(int*)); for (int var = 0; var < 4; ++var) { a[var] = malloc(3*sizeof(int)); } ?

Вы уверены, что sys/time.h файл может быть заменен файлом sys/timeb.h? Ты пробовал? sys/time.h выглядит как довольно конкретный файл linux/unix. Вы уверены, что папка sys/ссылается на ваш каталог matlab sys (C: \ PROGRA ~ 1 \ MATLAB \ R2012b \ sys \ lcc)?

В общем, похоже, что вы пытаетесь скомпилировать файл linux .mex на машине Windows. Например, gettimeofday - это чистый вызов linux (в соответствии с этим ответом): Equivalent of gettimeday() for Windows

Смежные вопросы