Linux glib нужен pkg-config, а pkg-config нужен glib?

Пытаюсь установить udev. И udev выдает ошибку во время ./configure

--exists: command not found configure: error:
pkg-config and "glib-2.0 >= 2.16" not found, please set GLIB_CFLAGS and GLIB_LIBS
to the correct values or pass --with-internal-glib to configure 

Хорошо, pkg-config и glib-2.0 отсутствуют.

Сначала я попытался установить pkg-config. Я получил это сообщение:

checking whether to list both direct and indirect dependencies... no
checking for Win32... no
checking if internal glib should be used... no
checking for pkg-config... no
./configure: line 13557: --exists: command not found
configure: error: pkg-config and "glib-2.0 >= 2.16" not found,
please set GLIB_CFLAGS and GLIB_LIBS to the correct values or 
pass --with-internal-glib to configure

Хорошо, я интерпретирую, что бойкости не хватает.

Следующий шаг - установка Glib.

И я получил это сообщение:

configure: error: in `/root/glib-2.33.3':
configure: error: The pkg-config script could not be found or is too old.  Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.

Alternatively, you may set the environment variables LIBFFI_CFLAGS
and LIBFFI_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

Но сейчас я озадачен. Они нужны друг другу? В чем моя ошибка?


person Peter    schedule 04.09.2012    source источник


Ответы (4)


Как вы уже заметили, действительно существует циклическая зависимость между pkg-config и glib. Чтобы сломать его, исходный код pkg-config включает версию glib, которого достаточно для его компиляции. Это должно разорвать цикл зависимости.

Попробуйте настроить pkg-config с --with-internal-glib.

person user1202136    schedule 04.09.2012
comment
Спасибо за ответ. Это сработало, но сообщения об ошибках glib и udev все еще оставались - person Peter; 04.09.2012
comment
@Peter ты пробовал компилировать udev с ./configure --with-internal-glib? - person user1202136; 04.09.2012
comment
@Peter, попробуйте это. Я не могу не подчеркнуть, насколько важно внимательно читать сообщения об ошибках и понимать, что они означают! - person ptomato; 04.09.2012
comment
Хорошая попытка: ./configure --with-internal-glib configure: WARNING: unrecognized options: --with-internal-glib - person Peter; 06.09.2012
comment
pkg-config установлен. Но следующая мысль возникла во время конфига udev. Я внимательно прочитал сообщение об ошибке. И я думаю, что почти понял, в чем ошибка, но не знаю, как ее исправить. Вот сообщение об ошибке: error: Package requirements (usbutils >= 0.82) were not met: No package 'usbutils' found Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables USBUTILS_CFLAGS and USBUTILS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. - person Peter; 06.09.2012
comment
У меня на плате нет USB, поэтому я не хочу устанавливать этот usbutils. Какое значение я должен установить для переменных среды? наконец, установить udev. - person Peter; 06.09.2012
comment
@Peter Вам нужно предоставить udev usb.ids файл, иначе он не будет компилироваться. Отметьте параметр конфигурации --with-usb-ids-path=DIR. - person user1202136; 06.09.2012
comment
@ user12: Спасибо за ответ. Стоит ли заменять DIR на реальный путь? Если я этого не сделаю, я получаю следующее сообщение: error: pci.ids not found, try --with-pci-ids-path= Где я могу получить путь к файлам .ids? Большое спасибо за поддержку. - person Peter; 06.09.2012
comment
если я попытаюсь накормить ./configure манекенами DIR такими ./configure --with-pci-ids-path=DIR --with-usb-ids-path=DIR, я получу еще одну ошибку error: libacl not found - person Peter; 06.09.2012
comment
udev - довольно центральный демон с множеством зависимостей. В Ubuntu это выглядит так: libacl1 (>= 2.2.51-5), libc6 (>= 2.10), libglib2.0-0 (>= 2.16.0), libselinux1 (>= 1.32), upstart-job, libudev0 (>= 175), module-init-tools (>= 3.2.1-0ubuntu3), initramfs-tools (>= 0.92bubuntu63), procps, adduser, util-linux (>> 2.15~rc2), upstart (>= 1.4-0ubuntu6) - person user1202136; 06.09.2012

Он уже содержится в сообщении об ошибке glib:

В качестве альтернативы вы можете установить переменные среды LIBFFI_CFLAGS и LIBFFI_LIBS, чтобы избежать необходимости вызывать pkg-config. См. Дополнительную информацию на странице руководства pkg-config.

Скрипт сборки Glib использует pkg-config для поиска libffi. Но вы также можете предоставить информацию вручную, задав переменные среды. Тогда вызов pkg-config не нужен. Самому Glib вообще не нужен pkg-config.

Другое решение проблемы предоставлено разработчиками pkg-config. Опять же, в конце сообщения об ошибке:

установите для GLIB_CFLAGS и GLIB_LIBS правильные значения или передайте --with-internal-glib для настройки

В этом сценарии сам pkg-config упакован со всем необходимым для сборки без наличия Glib в вашей системе.

person ypnos    schedule 04.09.2012
comment
Если вы не знаете, как сделать первое решение, второе решение не составит труда. - person ypnos; 04.09.2012
comment
Спасибо за ответ. Это сработало со вторым способом, но сообщения об ошибках glib и udev все еще оставались - person Peter; 04.09.2012

libudev теперь является частью systemd и не зависит от glib.

Большинство дистрибутивов Linux предоставляют двоичные файлы для pkg-config, libudev и glib. Вероятно, они уже установлены, но если нет, вы можете использовать диспетчер пакетов, чтобы получить их.

Если вам действительно нужно скомпилировать этот материал самостоятельно, рассмотрите возможность использования pkgconf, облегченной реализации пакета pkg -config, не использующий glib.

person David Grayson    schedule 02.08.2017

person    schedule
comment
Не могли бы вы добавить объяснение - person Narendra; 06.05.2014