mingw32-make ERROR,错误:' once_flag'在命名空间' std'没有命名类型

时间:2016-01-21 12:39:08

标签: c++ mingw

c:\libapiai-master\libapiai-master\build\examples>mingw32-make install
mingw32-make install
[  5%] Built target indent_stream_library
[ 10%] Built target cJson
[ 12%] Building CXX object apiai/CMakeFiles/apiai.dir/src/AI.cpp.obj
C:\libapiai-master\libapiai-master\apiai\src\AI.cpp:1:0: warning: -fPIC ignored for target (all code is position independent) [enabled by default]
 #include <apiai/AI.h>
 ^
C:\libapiai-master\libapiai-master\apiai\src\AI.cpp: In static member function 'static ai::Service& ai::AI::sharedService()':
C:\libapiai-master\libapiai-master\apiai\src\AI.cpp:42:12: error: 'once_flag' in namespace 'std' does not name a type
     static std::once_flag once_flag;
            ^
C:\libapiai-master\libapiai-master\apiai\src\AI.cpp:45:5: error: 'call_once' is not a member of 'std'
     std::call_once(once_flag, [](){
     ^
C:\libapiai-master\libapiai-master\apiai\src\AI.cpp:45:20: error: 'once_flag' was not declared in this scope
     std::call_once(once_flag, [](){
                    ^
apiai\CMakeFiles\apiai.dir\build.make:62: recipe for target 'apiai/CMakeFiles/apiai.dir/src/AI.cpp.obj' failed
mingw32-make[16]: *** [apiai/CMakeFiles/apiai.dir/src/AI.cpp.obj] Error 1
CMakeFiles\Makefile2:179: recipe for target 'apiai/CMakeFiles/apiai.dir/all' failed
mingw32-make[15]: *** [apiai/CMakeFiles/apiai.dir/all] Error 2
Makefile:137: recipe for target 'all' failed
mingw32-make[14]: *** [all] Error 2

我建了api.ai库。我用过MinGW。 我制作了Makefile,但我也犯了新错误。 有什么问题?

4 个答案:

答案 0 :(得分:3)

MinGW(但不是MinGW-w64)目前不支持完整的pthread接口,包括std::once_flag

您应该切换到MinGW-w64(pthread支持)或使用Win32 API。此外,使用mingw-std-threads的MinGW,您可以获得部分线程支持。

答案 1 :(得分:1)

您未传递-std=c++11标记。

答案 2 :(得分:0)

检查你的mingw版本,也许它不支持&#39;一次&#39;。或者也许只有一次&#39;包含在另一个标题中。向github报告问题,我将尝试解决它。 https://github.com/api-ai/libapiai

答案 3 :(得分:0)

我试过这个工作栏,它对我有用:

在detection_based_tracker.cpp进行修改

//#if (defined(__cplusplus) && __cplusplus > 199711L) || (defined(_MSC_VER) && _MSC_VER >= 1700) //#define USE_STD_THREADS //#endif