尝试使用 MinGW64 和 CMake 在 stdlib.h "_wtoi64 and others not declared in this scope" 中制作文件时出错



所以我尝试构建一个在OSX上编写的项目。我现在在窗户上。我使用的是CMake和MinGW 64位。

"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 liblibiDemo.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:StuffcodetoolsiDemo.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); }
                                                     ^
CMakeFilesiDemo.dirbuild.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
CMakeFilesMakefile2: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(以及其他两个缺失的)等?我怎么能自己做呢?

我在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);

最后是一些愚蠢的交叉编译器错误。我不得不更改"iDemo.cpp"中includes的顺序:

#include <iostream>
#include <string>
#include <highgui.h>
#include <cv.h>

但对我来说,简历h必须在其他内容之前包含在内。对他来说,这与以前的订单很好。。。

相关内容

最新更新