2013-10-13 126 views
3

Kinect开发的新手。我想用MinGW作为我的Kinect for windows的开发环境。编译错误,MinGW(g ++),windows API的kinect

我已经在c:\ program files \ Microsoft SDKS \ kinect \ v1.8下安装了Kinect for windows SDK。然后在MSDN的this example之后,我写了一个代码来初始化我的Kinect传感器。

当我编译使用:

g++ -c color.c -I "c:\Program Files\Microsoft SDKs\Kinect\v1.8\inc" 

我警告一大堆和错误

  1. 警告

    In file included from NuiApi.h:109:0, from color.c:2: 
        c:\Program Files\Microsoft SDKs\Kinect\v1.8\inc/NuiSensor.h:137:8: warning: extra tokens at end of # 
        endif directive [enabled by default] 
        #endif _Vector4_ 
          ^
        c:\Program Files\Microsoft SDKs\Kinect\v1.8\inc/NuiSensor.h:160:8: warning: extra tokens at end of # 
        endif directive [enabled by default] 
        #endif _Matrix4_ 
          ^
        c:\Program Files\Microsoft SDKs\Kinect\v1.8\inc/NuiSensor.h:209:8: warning: extra tokens at end of # 
        endif directive [enabled by default] 
        #endif _NUI_SKELETON_POSITION_INDEX_ 
        ... 
        ... 
    

    从我什么我已搜查,这些警告是由于Kinect SDK发生异常导致的编译器差异d的Visual Studio,他们是egnorable。

  2. 错误

    NuiApi.h:47:5: error: definition of 'HRESULT NuiInitialize' is marked 'dllimport' 
    
    NuiApi.h:47:5: error: '_In_' was not declared in this scope 
    
    NuiApi.h:77:14: error: expected constructor, destructor, or type conversion before '(' token 
        static_assert(E_NUI_FRAME_NO_DATA == 0x83010001, "Error code has changed."); 
          ^
    
    In file included from NuiApi.h:109:0, 
          from color.c:2: 
    c:\Program Files\Microsoft SDKs\Kinect\v1.8\inc/NuiSensor.h:2105:1: error: '_Check_return_' does not name a type 
    _Check_return_ HRESULT NUIAPI NuiGetSensorCount(_In_ int * pCount); 
    ^ 
    ...(tons of _Check_return does not name a type) 
    
    
    c:\Program Files\Microsoft SDKs\Kinect\v1.8\inc/NuiImageCamera.h:78:39: error: '_In_'  was not declared in this scope 
    c:\Program Files\Microsoft SDKs\Kinect\v1.8\inc/NuiImageCamera.h:78:70: error: '_Out_' was not declared in this scope 
    

问题

我最了解这些错误的(如果不是全部)是因为Kinect的SDK适用于VS.但我是一个想知道更多关于底层内容的新手。那么,我可以让我的g ++与Kinect SDK一起工作吗? 任何帮助将不胜感激!

顺便说一句,here是相关的页面:

+0

标题似乎有一些gcc不兼容:/。你必须使用'-std = C++ 11'标志(根据未被识别的'static_assert')。由于它是C++,因此使用C++扩展(如.cpp)而不是.c。请注意,图书馆也可能是不相容的: - /祝你好运。 – Jarod42

+0

@ Jarod42感谢您的快速回放。我添加了-std == C++ 11,并且static_assert被识别了。我想大多数这些错误都与MICROSOFT源代码注释语言有关,我正在尝试。 – Sky

回答

0

有一个办法! 下载sal.hconcurrencysal.h(通过Google搜索找到它们)。将它们放在include目录中,并在程序中包含sal.h。
正如上面在评论中提到的那样,添加标志-std == C++ 11。
然后打开NuiSkeleton.h,并在第412行和第534行处将NULL更改为nullptr(所有实例)。
它应该然后运行没有错误。