Подтвердить что ты не робот

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 отсутствует.

Следующий шаг установки 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.

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

export GLIB_CFLAGS="$(pkg-config --cflags glib-2.0)" 
export GLIB_LIBS="$(pkg-config --libs glib-2.0)"
printf '# In the case of a RHEL6.5\n\tGLIB_CFLAGS=%s\n\tGLIB_LIBS=%s\n' "$GLIB_CFLAGS" "$GLIB_LIBS"
# In the case of a RHEL6.5
        GLIB_CFLAGS=-I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include
        GLIB_LIBS=-lglib-2.0

# _now_ it is a no-brainer.

Ответ 4

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

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

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