Затмение Ошибка неверных аргументов при использовании gstreamer

Итак, я хочу использовать библиотеку gstreamer.

1. Ситуация

У меня есть код:

#include <gst/gstpipeline.h>
#include <gst/gst.h>
...
GstElement* pipe = gst_pipeline_new("PipeName");

куда gst_pipeline_new объявлен в gstpipeline.h:

GstElement* gst_pipeline_new (const gchar* name) G_GNUC_MALLOC;

где неочевидные «вещи» 🙂 определены где-то в системе:

typedef struct _GstElement GstElement;             // gstelement.h
typedef char   gchar;                              // gtypes.h
#define G_GNUC_MALLOC  __attribute__((__malloc__)) // gmacros.h

2. Проблема

Так как я использую make для сборки, у меня нет ошибок во время компиляции и компоновки. Сама программа работает нормально. Тем не мение…
В Eclipse IDE у меня следующая ошибка:

Description Resource Path Location Type
Invalid arguments '
Candidates are:
_GstElement * gst_pipeline_new(const ? *)
' file.cc /path/to/file line 106 Semantic Error

Я добавил все каталоги include, которые указаны в Makefile для затмения конфигурации проекта (Project-> Properties-> C / C ++ General-> Paths and Symbols-> Includes-> C ++). Конечно, это проект C ++.

3. Вопрос

Как избавиться от этой ошибки Eclipse? Я понятия не имею, как это сделать … И это сводит меня с ума, так как теперь я использую какой-то устаревший код, и у меня есть около 100 ошибок, подобных этой.

Пока что я пробовал:

  • кастинг либо по reinterpret_cast<>() или C-подобное литье в const gchar*
  • добавление typedef char gchar в начале файла — перед любым другим включением!
  • в том числе gtypes.h (gchar определяется там) — также, прежде чем любые другие включают
  • повторное выделение `_GstElement gst_pipeline_new (const gchar * name) ‘

Никто из тех не помог …

Мне кажется, что Затмение не видит gchar типа, так как он говорит, что кандидат _GstElement * gst_pipeline_new(const ? *) куда ? заменяет реальный тип. Но я понятия не имею, как заставить (или заставить событие :)) Затмение увидеть это …

1

Решение

Скорее всего, Eclipse просто не знает о ваших путях включения (для этой конкретной библиотеки) и жалуется на неиндексированные типы и объявления.

Вы можете добавить их в «Project-> Properties-> C ++ General-> Paths and Symbols»

Если это не помогает, вы также можете отключить семантическую проверку ошибок (см. Анализ кода), либо в целом, либо для определенных типов ошибок.

2

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

Как предположил g-maulik, похоже, это действительно проблема с индексатором. После увеличения ограничений кеша индексатора все работает нормально.

Перейдите в Window-> Preferences-> C / C ++ -> Ограничения кэша вкладки Indexer и увеличьте (может зависеть от машины):

Index Database cache:
Limit relative to the maximum heap size: 15%
Absolute limit: 128 MB

Header file cache:
Absolute Limit: 128 MB
1

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