Итак, я хочу использовать библиотеку gstreamer.
У меня есть код:
#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
Так как я использую 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 ++.
Как избавиться от этой ошибки Eclipse? Я понятия не имею, как это сделать … И это сводит меня с ума, так как теперь я использую какой-то устаревший код, и у меня есть около 100 ошибок, подобных этой.
Пока что я пробовал:
reinterpret_cast<>()
или C-подобное литье в const gchar*
typedef char gchar
в начале файла — перед любым другим включением!gtypes.h
(gchar
определяется там) — также, прежде чем любые другие включаютНикто из тех не помог …
Мне кажется, что Затмение не видит gchar
типа, так как он говорит, что кандидат _GstElement * gst_pipeline_new(const ? *)
куда ?
заменяет реальный тип. Но я понятия не имею, как заставить (или заставить событие :)) Затмение увидеть это …
Скорее всего, Eclipse просто не знает о ваших путях включения (для этой конкретной библиотеки) и жалуется на неиндексированные типы и объявления.
Вы можете добавить их в «Project-> Properties-> C ++ General-> Paths and Symbols»
Если это не помогает, вы также можете отключить семантическую проверку ошибок (см. Анализ кода), либо в целом, либо для определенных типов ошибок.
Как предположил 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