extern «C» с именем переменной «виртуальная»

Я пытаюсь создать простое тестовое приложение C ++, основанное на функциональном тесте KMS configure qt 5.1 (qtbase / config.tests / qpa / kms), который не выполняется. Приложение очень просто, как показано ниже:

#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 */
};

Обратите внимание на переменную с именем «virtual» в структуре drm_buf_map. Это вызывает ошибку компилятора C ++, которая не может быть решена с помощью extern «C». Это имеет смысл, но я не уверен, как решить эту проблему (кроме использования компилятора Си). Есть флаг компилятора, чтобы справиться с этим?

Спасибо!

7

Решение

Реальная проблема здесь в том, что вы включаете неправильный drm.h, Вы не используете менеджер пакетов и тоже не указываете /usr/include/libdrm в пути включения. Если одно из этих двух не выполнено, компилятор подберет /usr/include/drm.h или другой, который имеет эту проблему. Но файл из libdrm (/usr/include/libdrm/drm.h) это исправлено.

Ссылаться на реальный drm.h файл — у которого уже есть патч Эрика за эти 4 года назад:

struct drm_buf_map {
int count;  /**< Length of the buffer list */
#ifdef __cplusplus
void *virt;
#else
void *virtual;  /**< Mmap'd area in user-virtual */
#endif
struct drm_buf_pub *list;   /**< Buffer information */
};
2

Другие решения

Вот возможное решение:

добавлять #define virtual blah_blah_blah перед include

добавлять #undef virtual после include

редактировать

Теперь, если вам нужно использовать член virtual тебе придется позвонить blah_blah_blah,

3

По вопросам рекламы [email protected]