pkg-config не может найти gtk + -3.0

Я пытаюсь использовать libui-node для создания проекта Node.js.

$ yarn add libui-node

Это дает ошибку:

node-gyp configure build Пакет gtk + -3.0 не найден в пути поиска pkg-config. Возможно, вам следует добавить каталог, содержащий `gtk + -3.0.pc ', в переменную среды PKG_CONFIG_PATH Не найден пакет' gtk + -3.0 'gyp: вызов' pkg-config gtk + -3.0 --cflags-only-I | sed s / -I // g 'вернул статус выхода 0 в файле binding.gyp. при попытке загрузить binding.gyp gyp ERR! ошибка настройки ...

Итак, я следую инструкциям:

$ pkg-config gtk+-3.0 --cflags-only-I | sed s/-I//g 

Пакет gtk + -3.0 не найден в пути поиска pkg-config. Возможно, вам следует добавить каталог, содержащий `gtk + -3.0.pc ', в переменную среды PKG_CONFIG_PATH Пакет' gtk + -3.0 'не найден

Однако я уже установил gtk + -3.0 с помощью этой команды:

$  sudo apt-get install build-essential libgtk-3-dev

Я использую Ubuntu 17.10.

My PKG_CONFIG_PATH:

$ echo $PKG_CONFIG_PATH

/ usr / lib / pkgconfig: / usr / local / lib / pkgconfig:

Как мне настроить мою систему, чтобы она могла найти эту библиотеку?


person sdgfsdh    schedule 25.04.2018    source источник


Ответы (2)


РЕДАКТИРОВАТЬ:

Показывать местоположения по умолчанию, в которых pkg-config ищет файлы .pc, проще с помощью pkg-config --variable pc_path pkg-config, как указано @BrettHale в этом ответе SO . При этом используется специальный виртуальный pkg-config пакет, чтобы предоставить pkg-config конфигурацию. Это проще, чем анализировать журналы отладки или использовать strace (что спасало мне день не один раз), но суть заключалась в том, чтобы научить, как получать информацию, когда мы не знаем, где искать.

Исходный ответ:

Вам не нужно устанавливать PKG_CONFIG_PATH. Обычно пути, используемые вашим дистрибутивом, совпадают с путями, которые pkg-config будет искать по умолчанию.

pkg-config ищет .pc, связанный с GTK + 3. Когда вы установили libgtk-3-dev пакет разработки, вы найдете в нем .pc файлы, которые он предоставляет, используя:

$ dpkg -L libgtk-3-dev | grep '\.pc'
/usr/lib/x86_64-linux-gnu/pkgconfig/gdk-wayland-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-unix-print-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gdk-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-wayland-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gdk-x11-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-x11-3.0.pc

Эти результаты относятся к моей системе Ubuntu 14.04, но в Ubuntu 17.10 для amd64 файл не переместился, он по-прежнему:

/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc

Теперь файл назван gtk+-3.0.pc, поэтому имя модуля, как ожидалось pkg-config, - это имя без расширения .pc, то есть gtk+-3.0. Это помогает убедиться, что вы не допустили опечатки в названии модуля.

Например,

pkg-config --modversion gtk+3.0

сообщит вам, что не может найти gtk+3.0 и вам следует изменить PKG_CONFIG_PATH, но на самом деле проблема в том, что это неправильное имя модуля, так как отсутствует символ -.

Теперь мы запустим pkg-config в конфигурации по умолчанию, без настройки PKG_CONFIG_PATH. Это проверит поведение вашей системы по умолчанию, и pkg-config будет искать только пути по умолчанию:

unset PKG_CONFIG_PATH
pkg-config --modversion gtk+-3.0

Если это вернет версию GTK +, все готово. Если у вас по-прежнему появляется сообщение об ошибке, в котором говорится, что он не найден, вы можете проверить, где pkg-config выглядит по умолчанию в журналах отладки. Просто добавьте параметр --debug:

pkg-config --debug --modversion gtk+-3.0

Это возвращает довольно подробный журнал, в котором обнаружены .pc файлы. Вот несколько первых строк о системе Ubuntu 14.04:

Option --debug seen
Option --modversion seen
Error printing enabled by default due to use of --version, --libs, --cflags, --libs-only-l, --libs-only-L, --libs-only-other, --cflags-only-I, --cflags-only-other or --list. Value of --silence-errors: 0
Error printing enabled
Adding virtual 'pkg-config' package to list of known packages
Cannot open directory '/usr/local/lib/x86_64-linux-gnu/pkgconfig' in package search path: No such file or directory
Cannot open directory '/usr/local/lib/pkgconfig' in package search path: No such file or directory
Cannot open directory '/usr/local/share/pkgconfig' in package search path: No such file or directory
Scanning directory '/usr/lib/x86_64-linux-gnu/pkgconfig'
[...]

Обратите внимание на строки, начинающиеся с Cannot open directory и Scanning directory. Они говорят вам, куда смотрит pkg-config. Покажем только это:

$ pkg-config --debug --modversion gtk+-3.0 2>&1 | egrep "(Cannot open|Scanning) directory"
Cannot open directory '/usr/local/lib/x86_64-linux-gnu/pkgconfig' in package search path: No such file or directory
Cannot open directory '/usr/local/lib/pkgconfig' in package search path: No such file or directory
Cannot open directory '/usr/local/share/pkgconfig' in package search path: No such file or directory
Scanning directory '/usr/lib/x86_64-linux-gnu/pkgconfig'
Scanning directory '/usr/lib/pkgconfig'
Scanning directory '/usr/share/pkgconfig'

Теперь у вас есть все места, которые вы ищете. То же самое в моем 14.04 и в Ubuntu 17.04 (я проверил это в контейнере докера). Некоторые из этих каталогов существуют, другие нет. Вы заметите, что /usr/lib/x86_64-linux-gnu/pkgconfig здесь для меня, поэтому /usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc найдено.

Если его там нет, то да, вы можете добавить его в PKG_CONFIG_PATH:

export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig

Теперь это должно вернуть версию библиотеки GTK +, обнаруженную pkg-config:

pkg-config --modversion gtk+-3.0
person liberforce    schedule 26.04.2018
comment
Я пробовал в докер-контейнере docker run -it ubuntu:17.04, затем apt-get update && apt-get install pkg-config libget-3-dev. И это работает из коробки, поэтому я не знаю, что конкретно в вашей среде. - person liberforce; 27.04.2018

Это связано с тем, что файл .bbappend удаляет x11 из gtk + 3 ниже пути

cat meta-freescale/recipes-graphics/gtk+/gtk+3_%.bbappend

PACKAGECONFIG_remove_imxgpu2d = " \
${@bb.utils.contains("DISTRO_FEATURES", "wayland", "x11", "", d)} \
"

CFLAGS_append_imxgpu2d = " \
-DLINUX \
${@bb.utils.contains('DISTRO_FEATURES', 'wayland', '-DEGL_API_FB
-DEGL_API_WL', '', d)} \

Вместо удаления добавьте добавить, он будет успешно построен.

person chethan sv    schedule 11.02.2020