7

Qt 5.1 configure KMS 機能テスト (qtbase/config.tests/qpa/kms) に基づいて単純な C++ テスト アプリケーションを作成しようとしていますが、失敗しています。アプリケーションは、以下に示すように非常に単純です。

#include <stdlib.h>
extern "C" {
#include <gbm.h>
#include <xf86drmMode.h>
#include "xf86drm.h"
}
#include <EGL/egl.h>
#include <GLES2/gl2.h>

int main(int, char **)
{
    // Check for gbm_surface which is quite a recent addition.
    gbm_surface *surface = 0;

    return 0;
}

問題は、「libdrm/xf86drmMode.h」または「libdrm/xf86drm.h」をインクルードすると、「drm/drm.h」もインクルードされることです。「drm.h」内には、次のように定義された構造があります。

struct drm_buf_map {
    int count;              /**< Length of the buffer list */
    void *virtual;              /**< Mmap'd area in user-virtual */
    struct drm_buf_pub *list;   /**< Buffer information */
};

drm_buf_map 構造体内の「virtual」という名前の変数に注意してください。これにより、extern "C" を使用して解決できない C++ コンパイラ エラーが発生します。これは理にかなっていますが、この問題を解決する方法がわかりません (C コンパイラを使用する以外に)。これを処理するコンパイラ フラグはありますか?

ありがとう!

4

2 に答える 2

3

考えられる解決策は次のとおりです。

#define virtual blah_blah_blahの前に追加include

#undef virtualの後に追加include

編集

メンバーを使用する必要がある場合は、virtualそれを呼び出す必要がありますblah_blah_blah

于 2013-09-26T17:28:47.000 に答える