所以我尝试构建一个在OSX上编写的项目。我现在在窗户上。 我正在使用CMake和MinGW 64bit。
" cmake -G MinGW" Makefiles""工作正常,但当我尝试使用" mingw32-make"结果如下:
Scanning dependencies of target iDemo
[ 16%] Building CXX object CMakeFiles/iDemo.dir/src/Example.cpp.obj
[ 33%] Building CXX object CMakeFiles/iDemo.dir/src/DemoObject.cpp.obj
[ 50%] Building CXX object CMakeFiles/iDemo.dir/src/iDemo.cpp.obj
[ 66%] Building CXX object CMakeFiles/iDemo.dir/src/iDemoProcess.cpp.obj
[ 83%] Building CXX object CMakeFiles/iDemo.dir/src/Transform.cpp.obj
Linking CXX static library lib\libiDemo.a
[ 83%] Built target iDemo
Scanning dependencies of target iDemo
[100%] Building CXX object CMakeFiles/iDemo.dir/tools/iDemo.cpp.obj
In file included from D:/MinGW/mingw64/x86_64-w64-mingw32/include/assert.h:17:0,
from D:/opencv/opencv/sources/modules/core/include/opencv2/core/types_c.h:55,
from D:/opencv/opencv/sources/modules/core/include/opencv2/core/core_c.h:47,
from D:/opencv/opencv/sources/include/opencv/cv.h:63,
from D:\Stuff\code\tools\iDemo.cpp:3:
D:/MinGW/mingw64/x86_64-w64-mingw32/include/stdlib.h: In function 'long long int wtoll(const wchar_t*)':
D:/MinGW/mingw64/x86_64-w64-mingw32/include/stdlib.h:653:100: error: '_wtoi64' was not declared in this scope
__MINGW_EXTENSION __CRT_INLINE long long __cdecl wtoll (const wchar_t * _w) { return _wtoi64 (_w); }
^
D:/MinGW/mingw64/x86_64-w64-mingw32/include/stdlib.h: In function 'wchar_t* lltow(long long int, wchar_t*, int)':
D:/MinGW/mingw64/x86_64-w64-mingw32/include/stdlib.h:654:122: error: '_i64tow' was not declared in this scope
__MINGW_EXTENSION __CRT_INLINE wchar_t *__cdecl lltow (long long _n, wchar_t* _w, int _i) { return _i64tow (_n, _w, _i); }
^
D:/MinGW/mingw64/x86_64-w64-mingw32/include/stdlib.h: In function 'wchar_t* ulltow(long long unsigned int, wchar_t*, int)':
D:/MinGW/mingw64/x86_64-w64-mingw32/include/stdlib.h:655:133: error: '_ui64tow' was not declared in this scope
__MINGW_EXTENSION __CRT_INLINE wchar_t *__cdecl ulltow (unsigned long long _n, wchar_t * _w, int _i) { return _ui64tow (_n, _w, _i); }
^
CMakeFiles\iDemo.dir\build.make:54: recipe for target 'CMakeFiles/iDemo.dir/tools/iDemo.cpp.obj' failed
mingw32-make[2]: *** [CMakeFiles/iDemo.dir/tools/iDemo.cpp.obj] Error 1
CMakeFiles\Makefile2:94: recipe for target 'CMakeFiles/iDemo.dir/all' failed
mingw32-make[1]: *** [CMakeFiles/iDemo.dir/all] Error 2
Makefile:116: recipe for target 'all' failed
mingw32-make: *** [all] Error 2
现在stdlib.h中似乎导致此问题的行是:
#ifndef __CRT__NO_INLINE
__MINGW_EXTENSION __CRT_INLINE long long __cdecl atoll (const char * _c) { return _atoi64 (_c); }
__MINGW_EXTENSION __CRT_INLINE char *__cdecl lltoa (long long _n, char * _c, int _i) { return _i64toa (_n, _c, _i); }
__MINGW_EXTENSION __CRT_INLINE char *__cdecl ulltoa (unsigned long long _n, char * _c, int _i) { return _ui64toa (_n, _c, _i); }
__MINGW_EXTENSION __CRT_INLINE long long __cdecl wtoll (const wchar_t * _w) { return _wtoi64 (_w); }
__MINGW_EXTENSION __CRT_INLINE wchar_t *__cdecl lltow (long long _n, wchar_t * _w, int _i) { return _i64tow (_n, _w, _i); }
__MINGW_EXTENSION __CRT_INLINE wchar_t *__cdecl ulltow (unsigned long long _n, wchar_t * _w, int _i) { return _ui64tow (_n, _w, _i); }
#endif /* !__CRT__NO_INLINE */
有没有人知道可能导致这种情况的原因?也许甚至有同样的错误? 应该如何/在哪里_wtoi64(和其他2个遗失的)被宣布等?我怎么能自己做?
我发现stdlib.h中唯一的其他行是这些
__MINGW_EXTENSION _CRTIMP wchar_t *__cdecl _i64tow(__int64 _Val,wchar_t *_DstBuf,int _Radix) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
__MINGW_EXTENSION _CRTIMP wchar_t *__cdecl _ui64tow(unsigned __int64 _Val,wchar_t *_DstBuf,int _Radix) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
__MINGW_EXTENSION _CRTIMP __int64 __cdecl _wtoi64(const wchar_t *_Str);
__MINGW_EXTENSION _CRTIMP __int64 __cdecl _wtoi64_l(const wchar_t *_Str,_locale_t _Locale);
答案 0 :(得分:0)
最后,这是一些愚蠢的交叉编译错误。 我不得不改变" iDemo.cpp"中的包含顺序:
是
#include <iostream>
#include <string>
#include <highgui.h>
#include <cv.h>
但 cv.h必须包含在其他所有内容之前。 对他来说,按照之前的顺序工作正常......