Я пытаюсь запустить файл с именем vl_compile.m
для VLFeat и получаю эту ошибку в отношении файла заголовка mexutils.h
:
>> vl_compile
vl_compile: assuming that Visual C++ is the active compiler
vl_compile: compiling for PCWIN64 (64 bit)
MEX C:\Users\verastegui\Documents\panorama\lib\vlfeat-0.9.21\toolbox\aib\vl_aib.c
Building with 'MinGW64 Compiler (C)'.
Error using mex
In file included from C:\Users\verastegui\Documents\panorama\lib\vlfeat-0.9.21\toolbox\aib\vl_aib.c:16:0:
C:\Users\verastegui\Documents\panorama\lib\vlfeat-0.9.21\toolbox/mexutils.h:175:10: error: expected '=', ',', ';', 'asm' or
'__attribute__' before 'void'
EXTERN_C void __attribute__((noreturn))
^~~~
C:\Users\verastegui\Documents\panorama\lib\vlfeat-0.9.21\toolbox/mexutils.h: In function 'vlmxError':
C:\Users\verastegui\Documents\panorama\lib\vlfeat-0.9.21\toolbox/mexutils.h:277:1: warning: 'noreturn' function does return
}
^
Error in vl_compile (line 140)
mex(cmd{:}) ;
Вот макрос в mexutils.h
где на самом деле возникает ошибка:
/* these attributes suppress undefined symbols warning with GCC */
#ifdef VL_COMPILER_GNUC
#if (! defined(HAVE_OCTAVE))
EXTERN_C void __attribute__((noreturn))
mexErrMsgIdAndTxt (const char * identifier, const char * err_msg, ...) ;
#else
extern void __attribute__((noreturn))
mexErrMsgIdAndTxt (const char *id, const char *s, ...);
#endif
#endif
А вот функция, при которой возникает предупреждение:
vlmxError (VlmxErrorId errorId, char const * errorMessage, ...)
{
MEXUTILS_RAISE_HELPER ;
mexErrMsgIdAndTxt (formattedErrorId, formattedErrorMessage) ;
}
Я видел некоторые исправления в StackOverflow, которые говорят, что нужно либо закомментировать EXTERN_C void __attribute__((noreturn))
или добавить к нему точку с запятой, но это вызывает больше ошибок. Я использую самую последнюю версию VLFeat и самую последнюю версию компилятора MinGW. При необходимости я могу предоставить больше кода, но это только самая последняя версия VLFeat. Любая помощь будет принята с благодарностью.