Как настроить среду разработки C в Linux для GTK+?

Я новичок в программировании C в Linux. Мне нравится создавать графические интерфейсы с помощью GTKlibs. Единственная проблема в том, что я не могу - и не только с gtk - правильно установить эти пакеты. У меня проблема с включением таких библиотек, как #include<gtk/gtk.h>, если я установил их с sudo apt-get install gtklib-3-dev.

Во время компиляции он каждый раз говорит, что файл отсутствует и так далее. Я читал возможность поместить в компилятор конфиги dpkg и cflags, но это тоже не работает. Как linux управляет папкой include и почему библиотеки, такие как gtk, имеют верхнюю папку с версией, например gtk3 и т. д. Это проблема, которая приводит к отсутствующим файлам.


person RandomDev    schedule 19.02.2019    source источник
comment
Добро пожаловать в СО. Пожалуйста, покажите нам, что вы пробовали. Описание не дает достаточно информации. Нам нужны точные команды, которые вы используете, и точное сообщение об ошибке. Также прочитайте Как спросить и покажите нам MCVE   -  person Gerhardh    schedule 19.02.2019
comment
Верхнее имя папки для того, чтобы можно было установить несколько версий gtk2/gtk3 одновременно и не столкнуться с конфликтами.   -  person Paul Childs    schedule 25.02.2019
comment
gcc во время компиляции управляет тем, какие папки использовать с флагами -I. Таким образом, можно выбрать gtk2 или gtk3, когда оба установлены. Для библиотек с файлом .pc вы можете использовать pkg-config, чтобы получить их: pkg-config gtk+-3 --cflags-only-I. Во время компоновки аналогичные вызовы необходимы для библиотек.   -  person Paul Childs    schedule 25.02.2019


Ответы (1)


Точное имя пакета зависит от вашего дистрибутива Linux. Если вы используете Ubuntu, то правильная команда:

sudo apt-get install libgtk-3-dev

Затем вы можете проверить, обнаружены ли пакеты разработки, с помощью чего-то вроде:

pkg-config --exists gtk+-3.0 && echo "Installed" || echo "Not installed"

Чтобы узнать, как собрать приложение, следуйте инструкциям в официальной документации на странице Как компилировать приложения GTK+.

Наконец, вместо того, чтобы выполнять вызовы gcc вручную, вы можете автоматизировать их с помощью системы сборки, такой как система сборки Meson. Существует руководство о том, как создать простое приложение GTK+ с помощью Meson.

person liberforce    schedule 19.02.2019
comment
Обратите внимание, что не все пакеты разработки будут настолько внимательны, чтобы упаковать файл .pc для pkg-config, и в этом случае приведенный выше вызов может дать ложные отрицательные результаты. Для gtk это безопасно. - person Paul Childs; 25.02.2019
comment
Спасибо за ответы, я пробовал это много раз с pkg-config. На данный момент я пробовал: gcc -Wall -std=c11 'pkg-config --cflags gtk+-3.0' ./main.c -o main 'pkg-config --libs gtk+-3.0' и выдает ошибку: gcc: ошибка: нет такого файла или каталога. Я пробовал это только с помощью одной команды pkg-config, и она показывает путь, аналогичный документации. - person RandomDev; 26.02.2019
comment
Может ли кто-нибудь объяснить мне справочную информацию о системе пакетов или о том, как gcc ищет и связывает пакеты. Или может ссылку. Документация менее полезна, потому что часто показывает слишком специфические вещи. - person RandomDev; 26.02.2019
comment
Это другой вопрос, и вам следует немного поискать, как устанавливать пакеты в вашей системе и как узнать, какой пакет предоставляет какой файл. На данный момент проверка gcc установлена ​​с использованием which gcc (подробнее man which). Тогда вы сделали частую ошибку, вы должны использовать обратные кавычки вместо одинарных кавычек. У них нет такого же измерения в оболочке. Замените обратные кавычки синтаксисом $(...), менее подверженным ошибкам. Итак, попробуйте gcc -Wall -std=c11 $(pkg-config --cflags gtk+-3.0) ./main.c -o main $(pkg-config --libs gtk+-3.0) - person liberforce; 26.02.2019
comment
омг, большое спасибо. Это делает Трюк. Я пробовал это с обратной цитатой несколькими неделями ранее, но никакой разницы. Пробовал нет с долларом и обратной кавычкой, компилируется без ошибок и предупреждений. - person RandomDev; 28.02.2019