Почему gtkmm не найден компилятором, хотя он установлен и обнаружен IntelliSense

Всего десять часов назад я хотел попробовать GTK на своем ноутбуке с Arch-Linux и нашел GTK. -introduction-Страница. Я скопировал коды 1:1 в три файла в VSCode. Наивная попытка просто построить его показала мне, что это требует дальнейшей настройки. Поэтому я добавил папку .vscode с двумя необходимыми JSON-файлами. Хотя IntelliSense теперь отлично работает с кодом, GCC по-прежнему выдает ошибки, что #include <gtkmm/button.h> не найден, тем временем я могу щелкнуть правой кнопкой мыши заголовок и открыть его таким образом. Библиотеки, которые я добавил к аргументам, которые я получил pkg-config --cflags --libs gtkmm-3.0. Я надеюсь, что кто-то знает, что мне не хватает. У меня были проблемы как с clang, так и с gcc.


c_cpp_properties.json

    "env": {
        "myDefaultIncludePath": [
            "${workspaceFolder}",
            "${workspaceFolder}/include"
        ],
        "myCompilerPath": "/usr/local/bin/g++"
    },
    "configurations": [
        {
            "name": "include paths",
            "intelliSenseMode": "gcc-x64"
            ,
            "includePath": [

               "/usr/include/gtk-3.0",
               "/usr/include/pango-1.0",
               "/usr/include/glib-2.0",
               "/usr/lib/glib-2.0/include",
               "/usr/include/harfbuzz",
               "/usr/include/freetype2",
               "/usr/include/libpng16",
               "/usr/include/libmount",
               "/usr/include/blkid",
               "/usr/include/fribidi",
               "/usr/include/cairo",
               "/usr/include/lzo",
               "/usr/include/pixman-1",
               "/usr/include/gdk-pixbuf-2.0",
               "/usr/include/gio-unix-2.0",
               "/usr/include/cloudproviders",
               "/usr/include/atk-1.0",
               "/usr/include/at-spi2-atk/2.0",
               "/usr/include/dbus-1.0",
               "/usr/lib/dbus-1.0/include",
               "/usr/include/at-spi-2.0",
               "/usr/include/gtkmm-3.0",
               "/usr/lib/gtkmm-3.0/include",
               "/usr/include/giomm-2.4",
               "/usr/lib/giomm-2.4/include",
               "/usr/include/glib-2.0",
               "/usr/lib/glib-2.0/include",
               "/usr/include/libmount",
               "/usr/include/blkid",
               "/usr/include/glibmm-2.4",
               "/usr/lib/glibmm-2.4/include",
               "/usr/include/sigc++-2.0",
               "/usr/lib/sigc++-2.0/include",
               "/usr/include/gtk-3.0",
               "/usr/include/pango-1.0",
               "/usr/include/harfbuzz",
               "/usr/include/freetype2",
               "/usr/include/libpng16",
               "/usr/include/fribidi",
               "/usr/include/cairo",
               "/usr/include/lzo",
               "/usr/include/pixman-1",
               "/usr/include/gdk-pixbuf-2.0",
               "/usr/include/gio-unix-2.0",
               "/usr/include/cloudproviders",
               "/usr/include/atk-1.0",
               "/usr/include/at-spi2-atk/2.0",
               "/usr/include/dbus-1.0",
               "/usr/lib/dbus-1.0/include",
               "/usr/include/at-spi-2.0",
               "/usr/include/cairomm-1.0",
               "/usr/lib/cairomm-1.0/include",
               "/usr/include/pangomm-1.4",
               "/usr/lib/pangomm-1.4/include",
               "/usr/include/atkmm-1.6",
               "/usr/lib/atkmm-1.6/include",
               "/usr/include/gtk-3.0/unix-print",
               "/usr/include/gdkmm-3.0",
               "/usr/lib/gdkmm-3.0/include"
            ],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "browse": {
                "path": [
                    "${workspaceFolder}"
                ],
                "limitSymbolsToIncludedHeaders": true,
                "databaseFilename": ""
            }
        }
    ],
    "version": 4
}

tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
        "type": "shell",
        "label": "gcc debug build active file - with GTK",
        "command": "/usr/bin/gcc",
        "args": [          
            "-g",
    
                    "-pthread",
                    "/usr/include/gtkmm-3.0",
                    "/usr/lib/gtkmm-3.0/include",
                    "/usr/include/giomm-2.4",
                    "/usr/lib/giomm-2.4/include",
                    "/usr/include/glib-2.0",
                    "/usr/lib/glib-2.0/include",
                    "/usr/include/libmount",
                    "/usr/include/blkid",
                    "/usr/include/glibmm-2.4",
                    "/usr/lib/glibmm-2.4/include",
                    "/usr/include/sigc++-2.0",
                    "/usr/lib/sigc++-2.0/include",
                    "/usr/include/gtk-3.0",
                    "/usr/include/pango-1.0",
                    "/usr/include/harfbuzz",
                    "/usr/include/freetype2",
                    "/usr/include/libpng16",
                    "/usr/include/fribidi",
                    "/usr/include/cairo",
                    "/usr/include/lzo",
                    "/usr/include/pixman-1",
                    "/usr/include/gdk-pixbuf-2.0",
                    "/usr/include/gio-unix-2.0",
                    "/usr/include/cloudproviders",
                    "/usr/include/atk-1.0",
                    "/usr/include/at-spi2-atk/2.0",
                    "/usr/include/dbus-1.0",
                    "/usr/lib/dbus-1.0/include",
                    "/usr/include/at-spi-2.0",
                    "/usr/include/cairomm-1.0",
                    "/usr/lib/cairomm-1.0/include",
                    "/usr/include/pangomm-1.4",
                    "/usr/lib/pangomm-1.4/include",
                    "/usr/include/atkmm-1.6",
                    "/usr/lib/atkmm-1.6/include",
                    "/usr/include/gtk-3.0/unix-print",
                    "/usr/include/gdkmm-3.0",
                    "/usr/lib/gdkmm-3.0/include",
            "${file}",
    
            "-lgtkmm-3.0",
            "-latkmm-1.6",
            "-lgdkmm-3.0",
            "-lgiomm-2.4",
            "-lgtk-3",
            "-lgdk-3",
            "-lz",
            "-latk-1.0",
            "-lcairo-gobject",
            "-lgio-2.0",
            "-lpangomm-1.4",
            "-lglibmm-2.4",
            "-lcairomm-1.0",
            "-lsigc-2.0",
            "-lpangocairo-1.0",
            "-lpango-1.0",
            "-lharfbuzz",
            "-lcairo",
            "-lgdk_pixbuf-2.0",
            "-lgobject-2.0",
            "-lglib-2.0",
    
            "-o",
            "${fileDirname}/${fileBasenameNoExtension}"
        ],
        "options": {
            "cwd": "/usr/bin"
        },
        "problemMatcher": [
            "$gcc"
        ],
        "group": {
            "kind": "build",
            "isDefault": true
        }
        } 
    ]
}

Эти настройки в значительной степени основаны на этом стеке. -Переполнение.


Вывод компилятора:

> Executing task: /usr/bin/gcc -g -pthread /usr/include/gtkmm-3.0 /usr/lib/gtkmm-3.0/include /usr/include/giomm-2.4
 /usr/lib/giomm-2.4/include /usr/include/glib-2.0 /usr/lib/glib-2.0/include /usr/include/libmount /usr/include/blkid /usr/include/glibmm-2.4 /usr/lib/glibmm-2.4/include /usr/include/sigc++-2.0 /usr/lib/sigc++-2.0/include /usr/include/gtk-3.0 /usr/include/pango-1.0 /usr/include/harfbuzz /usr/include/freetype2 /usr/include/libpng16 /usr/include/fribidi /usr/include/cairo /usr/include/lzo /usr/include/pixman-1 /usr/include/gdk-pixbuf-2.0 /usr/include/gio-unix-2.0 /usr/include/cloudproviders /usr/include/atk-1.0 /usr/include/at-spi2-atk/2.0 /usr/include/dbus-1.0 /usr/lib/dbus-1.0/include /usr/include/at-spi-2.0 /usr/include/cairomm-1.0 /usr/lib/cairomm-1.0/include /usr/include/pangomm-1.4 /usr/lib/pangomm-1.4/include /usr/include/atkmm-1.6 /usr/lib/atkmm-1.6/include /usr/include/gtk-3.0/unix-print /usr/include/gdkmm-3.0 /usr/lib/gdkmm-3.0/include /home/bernhard/Projekte/hellogtk/helloworld.h -lgtkmm-3.0 -latkmm-1.6 -lgdkmm-3.0 -lgiomm-2.4 -lgtk-3 -lgdk-3 -lz -latk-1.0 -lcairo-gobject -lgio-2.0 -lpangomm-1.4 -lglibmm-2.4 -lcairomm-1.0 -lsigc-2.0 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -lcairo -lgdk_pixbuf-2.0 -lgobject-2.0 -lglib-2.0 -o /home/bernhard/Projekte/hellogtk/helloworld <

/home/bernhard/Projekte/hellogtk/helloworld.h:5:10: schwerwiegender Fehler: gtkmm/window.h: Datei oder Verzeichnis nicht gefunden
    5 | #include <gtkmm/window.h>
      |          ^~~~~~~~~~~~~~~~
Kompilierung beendet.
Der Terminalprozess "/bin/bash '-c', '/usr/bin/gcc -g -pthread /usr/include/gtkmm-3.0 /usr/lib/gtkmm-3.0/include /usr/include/giomm-2.4 /usr/lib/giomm-2.4/include /usr/include/glib-2.0 /usr/lib/glib-2.0/include /usr/include/libmount /usr/include/blkid /usr/include/glibmm-2.4 /usr/lib/glibmm-2.4/include /usr/include/sigc++-2.0 /usr/lib/sigc++-2.0/include /usr/include/gtk-3.0 /usr/include/pango-1.0 /usr/include/harfbuzz /usr/include/freetype2 /usr/include/libpng16 /usr/include/fribidi /usr/include/cairo /usr/include/lzo /usr/include/pixman-1 /usr/include/gdk-pixbuf-2.0 /usr/include/gio-unix-2.0 /usr/include/cloudproviders /usr/include/atk-1.0 /usr/include/at-spi2-atk/2.0 /usr/include/dbus-1.0 /usr/lib/dbus-1.0/include /usr/include/at-spi-2.0 /usr/include/cairomm-1.0 /usr/lib/cairomm-1.0/include /usr/include/pangomm-1.4 /usr/lib/pangomm-1.4/include /usr/include/atkmm-1.6 /usr/lib/atkmm-1.6/include /usr/include/gtk-3.0/unix-print /usr/include/gdkmm-3.0 /usr/lib/gdkmm-3.0/include /home/bernhard/Projekte/hellogtk/helloworld.h -lgtkmm-3.0 -latkmm-1.6 -lgdkmm-3.0 -lgiomm-2.4 -lgtk-3 -lgdk-3 -lz -latk-1.0 -lcairo-gobject -lgio-2.0 -lpangomm-1.4 -lglibmm-2.4 -lcairomm-1.0 -lsigc-2.0 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -lcairo -lgdk_pixbuf-2.0 -lgobject-2.0 -lglib-2.0 -o /home/bernhard/Projekte/hellogtk/helloworld'" konnte nicht gestartet werden (Exitcode: 1).

person kleinerLupus    schedule 02.05.2021    source источник


Ответы (1)


Перепроверив свои настройки, я обнаружил отсутствующий -I в tasks.json. Далее мне пришлось добавить оба файла в Args:

"args": [          
    "-g",
        "-I${workspaceFolder}",
        "-pthread",
        "-I/usr/include/gtkmm-3.0",
        "-I/usr/lib/gtkmm-3.0/include",
        "-I/usr/include/giomm-2.4",
        "-I/usr/lib/giomm-2.4/include",
        "-I/usr/include/glib-2.0",
        "-I/usr/lib/glib-2.0/include",
        "-I/usr/include/libmount",
        "-I/usr/include/blkid",
        "-I/usr/include/glibmm-2.4",
        "-I/usr/lib/glibmm-2.4/include",
        "-I/usr/include/sigc++-2.0",
        "-I/usr/lib/sigc++-2.0/include",
        "-I/usr/include/gtk-3.0",
        "-I/usr/include/pango-1.0",
        "-I/usr/include/harfbuzz",
        "-I/usr/include/freetype2",
        "-I/usr/include/libpng16",
        "-I/usr/include/fribidi",
        "-I/usr/include/cairo",
        "-I/usr/include/lzo",
        "-I/usr/include/pixman-1",
        "-I/usr/include/gdk-pixbuf-2.0",
        "-I/usr/include/gio-unix-2.0",
        "-I/usr/include/cloudproviders",
        "-I/usr/include/atk-1.0",
        "-I/usr/include/at-spi2-atk/2.0",
        "-I/usr/include/dbus-1.0",
        "-I/usr/lib/dbus-1.0/include",
        "-I/usr/include/at-spi-2.0",
        "-I/usr/include/cairomm-1.0",
        "-I/usr/lib/cairomm-1.0/include",
        "-I/usr/include/pangomm-1.4",
        "-I/usr/lib/pangomm-1.4/include",
        "-I/usr/include/atkmm-1.6",
        "-I/usr/lib/atkmm-1.6/include",
        "-I/usr/include/gtk-3.0/unix-print",
        "-I/usr/include/gdkmm-3.0",
        "-I/usr/lib/gdkmm-3.0/include",
    "/home/bernhard/Projekte/hellogtk/main.cpp",
    "/home/bernhard/Projekte/hellogtk/helloworld.cpp",
    
        "-lgtkmm-3.0",
        "-latkmm-1.6",
        "-lgdkmm-3.0",
        "-lgiomm-2.4",
        "-lgtk-3",
        "-lgdk-3",
        "-lz",
        "-latk-1.0",
        "-lcairo-gobject",
        "-lgio-2.0",
        "-lpangomm-1.4",
        "-lglibmm-2.4",
        "-lcairomm-1.0",
        "-lsigc-2.0",
        "-lpangocairo-1.0",
        "-lpango-1.0",
        "-lharfbuzz",
        "-lcairo",
        "-lgdk_pixbuf-2.0",
        "-lgobject-2.0",
        "-lglib-2.0",
    "-Wpedantic",
    "-o",
    "${fileDirname}/${fileBasenameNoExtension}"
    
],

Мне также пришлось переключиться с "command": "/usr/bin/gcc" на "command": "/usr/bin/g++", потому что это свяжет и правильно интерпретирует код C++.

Теперь вроде работает достаточно хорошо. Конечно, я бы предпочел, чтобы компилятор/компоновщик автоматически обнаруживал все файлы .cpp. Но пока все в порядке.

person kleinerLupus    schedule 03.05.2021