Я использую VS2019 для создания проекта визуального SLAM, который использует Pangolin для создания визуализаций.
Я успешно собрал Pangolin из исходного кода и проверил, что он работает (включенные примеры работают).
Теперь я пытаюсь собрать пакет SLAM, который использует заголовки библиотеки Pangolin. В общих настройках C++ я добавил путь к каталогу Pangolin includes (C:/dev/Pangolin/include).
Когда я начинаю сборку проекта, компилятор по какой-то причине выбирает (неправильные) заголовки GL\gl.h.
C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um\GL/gl.h(1157,11): error C2144: syntax error: 'void' should be preceded by ';'
Также я не уверен, почему вообще ищут GL/gl.h. У меня есть один файл System.cpp, который импортирует «pangolin/pangolin.h», который содержит следующий код
#pragma once
// This header is here for compatibility when building
// all of Pangolin. You are recommended to include only
// what you need, especially when building without a
// particular feature, such as GUI for Video, otherwise
// you'll receive errors.
#include <pangolin/platform.h>
#include <pangolin/display/display.h>
#include <pangolin/display/view.h>
#include <pangolin/display/widgets.h>
#include <pangolin/gl/colour.h>
#include <pangolin/gl/gl.h>
#include <pangolin/gl/gldraw.h>
#include <pangolin/gl/glstate.h>
#include <pangolin/gl/glvbo.h>
#include <pangolin/handler/handler.h>
#include <pangolin/image/image_io.h>
#include <pangolin/plot/plotter.h>
#include <pangolin/var/varextra.h>
#include <pangolin/video/video.h>
#include <pangolin/video/video_input.h>
#include <pangolin/video/video_output.h>
#ifdef _ANDROID_
# include <pangolin/display/device/display_android.h>
#endif
// Let other libraries headers know about Pangolin
#define HAVE_PANGOLIN
Если я удалю путь C:/dev/Pangolin/include, компиляция не сможет найти pangolin/pangolin.h и выдаст сообщение (как и ожидалось).
Любая помощь в решении этой проблемы с заголовком будет очень признательна.
Если бы вы использовали параметр /showIncludes , вы бы увидели полный каталог того, какой файл включен каким включаемым файлом.





<pangolin/pangolin.h> Панголина включает <pangolin/gl/gl.h>, который включает <pangolin/gl/glinclude.h>, который включает <pangolin/gl/glplatform.h>, который включает <GL/gl.h>.
Вот почему ваш компилятор ищет этот файл.
Почему происходит сбой при компиляции — отдельный вопрос.
Спасибо, я был настроен скептически, но не смог разрешить (отследить) порядок синтаксического анализа/включения. По предложению @PaulMcKenzie, в дальнейшем я буду использовать опцию /showIncludes.
Я не думаю, что компилятор выбрал неправильный заголовок, но заголовок Pangolin
gl.h, в свою очередь, включает в себя «стандартный»GL/gl.hзаголовок.