编译错误,MinGW(g ++),用于Windows API的kinect

时间:2013-10-13 10:50:17

标签: c++ windows g++ kinect

Kinect开发的新手。我想使用MinGW作为我的Kinect for windows的开发环境。

我在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适用于Visual Studio,它们是可以使用的。

  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
    
  3. 问题

    我理解大多数这些错误(如果不是全部)是因为Kinect SDK适用于VS.但我是一个新手,想要了解更多关于底层经历的事情。那么我可以让我的g ++与Kinect SDK一起使用吗? 任何帮助将不胜感激!!

    顺便说一下,here是与页面相关的内容:

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

您似乎并不了解Visual Studio库与MinGW不兼容。我并不是说在MinGW中使用Kinect SDK是“不可能”的,但是您要尝试执行的操作并不那么容易 两种解决方案,要么您不使用Kinect SDK(有替代方案,例如OpenNI,Freenect ...),要么您使用Visual Studio编译项目(Community Edition免费供个人使用)