编译错误,MinGW(g++),kinect for windows API

Compiling error, MinGW(g++), kinect for windows API

本文关键字:kinect for windows API g++ 错误 MinGW 编译      更新时间:2023-10-16

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

我已经在 c:\program files\Microsoft SDKS\kinect\v1.8 下安装了 Kinect for Windows SDK。然后,按照 MSDN 中的此示例,我编写了一个代码来初始化我的 Kinect 传感器。

当我使用编译时:

g++ -c color.c -I "c:Program FilesMicrosoft SDKsKinectv1.8inc"

我收到一大堆警告和错误

  1. 警告

        In file included from NuiApi.h:109:0, from color.c:2:
        c:Program FilesMicrosoft SDKsKinectv1.8inc/NuiSensor.h:137:8: warning: extra tokens at end of #
        endif directive [enabled by default]
        #endif _Vector4_
                ^
        c:Program FilesMicrosoft SDKsKinectv1.8inc/NuiSensor.h:160:8: warning: extra tokens at end of #
        endif directive [enabled by default]
        #endif _Matrix4_
                ^
        c:Program FilesMicrosoft SDKsKinectv1.8inc/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 FilesMicrosoft SDKsKinectv1.8inc/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 FilesMicrosoft SDKsKinectv1.8inc/NuiImageCamera.h:78:39: error: '_In_'       was not declared in this scope
    c:Program FilesMicrosoft SDKsKinectv1.8inc/NuiImageCamera.h:78:70: error: '_Out_' was not declared in this scope
    

问题

我知道这些错误中的大多数(如果不是全部)是因为 Kinect SDK 适用于 VS。但我是一个新手,想知道更多关于下面发生的事情。那么,我可以让我的 g++ 与 Kinect SDK 配合使用吗?任何帮助将不胜感激!

顺便说一下,这里有一个相关的页面:

有办法!下载sal.hconcurrencysal.h(通过谷歌搜索找到它们)。将它们放在包含目录中,并在程序中包含sal.h。
如上文注释中所述,添加标志 -std==c++11。
然后打开NuiSkeleton.h,在第412行和第534行,将NULL更改为nullptr(所有实例)。
然后,它应该运行而不会出错。

你似乎没有意识到Visual Studio库与MinGW不是开箱即用的兼容。我并不是说在MinGW中使用Kinect SDK是不可能的,但是您要做的事情不会那么容易。两种解决方案,要么不使用Kinect SDK(有替代方案,如OpenNI,Freenect...),要么使用Visual Studio编译项目(社区版免费供个人使用)