pkg-config не может найти gtk + -3.0 - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь использовать 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:

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

1 Ответ

0 голосов
/ 26 апреля 2018

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

Отображение местоположений по умолчанию, где pkg-config ищет .pc файлы, легче сделать с pkg-config --variable pc_path pkg-config, как указано @BrettHale в этот так ответ .При этом используется специальный виртуальный пакет 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 (я проверил это в контейнере Docker).Некоторые из этих каталогов существуют, другие нет.Вы заметите, что /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
...