Ошибка компиляции: библиотека установлена ​​(это показывает политика apt-cache), но pkg-config не находит ее

Извините, у меня нет опыта работы с gcc и установки пакетов из исходного кода, и я не могу решить мою проблему:

Я пытаюсь установить ncmpcpp из исходного кода ( github) в Ubuntu 14.04 (причина в том, что визуализаторы окрашены в версии 0.7.1).

Так что ранее я установил mpd, и ncmpcpp из репозитория (версия 0.5.10) работал отлично.

Теперь мои шаги установки (после удаления ncmpcpp с помощью apt-get):

git clone https://github.com/arybczak/ncmpcpp
cd ncmpcpp
./autogen.sh

Я получаю ошибку:

configure: error: libmpdclient >= 2.8 is required!

Тем не менее, вот результат apt-cache policy libmpdclient2:

libmpdclient2:
  Installé : 2.9-1ubuntu1
  Candidat : 2.9-1ubuntu1
 Table de version :
 *** 2.9-1ubuntu1 0
        500 http://archive.ubuntu.com/ubuntu/ trusty/universe amd64 Packages
        100 /var/lib/dpkg/status

После некоторого поиска, я попробовал эту команду: ldconfig -p | grep mpdclient:

libmpdclient.so.2 (libc6,x86-64) => /usr/lib/libmpdclient.so.2

Но я могу убедиться, что pkg-config не находит его:

$ pkg-config --exists --print-errors "libmpdclient2"

Package libmpdclient2 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libmpdclient2.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libmpdclient2' found

Пытаясь с "libmpdclient" возвращает то же самое.

Я искал свой компьютер, используя sudo find / -name "libmpdclient2.pc" и ничего не подошло.

Когда вы читаете файл configure.ac (синтаксис которого мне незнаком), вы видите это, и мне интересно, проверяет ли он libmpdclient или же libmpdclient2:

dnl ==============================
dnl = checking for libmpdclient2 =
dnl ==============================
PKG_CHECK_MODULES([libmpdclient], [libmpdclient >= 2.8], [
    AC_SUBST(libmpdclient_CFLAGS)
    AC_SUBST(libmpdclient_LIBS)
    CPPFLAGS="$CPPFLAGS $libmpdclient_CFLAGS"
    AC_CHECK_HEADERS([mpd/client.h],
        LIBS="$LIBS $libmpdclient_LIBS"
    ,
        AC_MSG_ERROR([missing mpd/client.h header])
    )
],
    AC_MSG_ERROR([libmpdclient >= 2.8 is required!])
)

Извините за длинный пост, я вне подсказок. У меня такое ощущение, что это пакет для пользователей Archlinux, а не для Ubuntu, но мне он очень нравится!

1 ответ

Решение

Обычно в схеме упаковки Ubuntu файлы, необходимые для разработки программного обеспечения с использованием библиотеки (включая заголовочные файлы и pkg-config). .pc файлы, если они есть) отделяются от самой библиотеки времени выполнения и предоставляются в виде отдельного пакета.

Чаще всего этот пакет имеет то же имя, что и пакет библиотеки времени выполнения, плюс -dev суффикс, например

libgimp2.0 - Libraries for the GNU Image Manipulation Program
libgimp2.0-dev - Headers and other files for compiling plugins for GIMP

однако в этом случае оказывается, что пакет разработки, соответствующий libmpdclient2 это просто libmpdclient-dev:

$ apt-cache policy libmpdclient2
libmpdclient2:
  Installed: (none)
  Candidate: 2.9-1ubuntu1
  Version table:
     2.9-1ubuntu1 0
        500 http://ca.archive.ubuntu.com/ubuntu/ trusty/universe amd64 Packages

в то время как

$ apt-cache policy libmpdclient-dev
libmpdclient-dev:
  Installed: (none)
  Candidate: 2.9-1ubuntu1
  Version table:
     2.9-1ubuntu1 0
        500 http://ca.archive.ubuntu.com/ubuntu/ trusty/universe amd64 Packages

Установка libmpdclient-dev Пакет должен предоставить необходимые файлы для разработки и сохранить pkg-config рад, но вы должны использовать правильное имя пакета:

pkg-config --exists --print-errors libmpdclient
Другие вопросы по тегам