У pkg-config разные выходы в (Centos 7 и Fedora 28) и Debian 9 - PullRequest
0 голосов
/ 27 сентября 2018

Я сейчас работаю с pjsip и обнаружил одну проблему.После установки этой библиотеки мы получаем следующий файл libpjproject.pc :

# Package Information for pkg-config
prefix=/usr/local
exec_prefix=${prefix}
libdir=/usr/local/lib
includedir=/usr/local/include

Name: libpjproject
Description: Multimedia communication library
URL: http://www.pjsip.org
Version: 2.7.2
Libs: -L${libdir} -lpjsua2-x86_64-unknown-linux-gnu -lstdc++ -lpjsua-x86_64-unknown-linux-gnu -lpjsip-ua-x86_64-unknown-linux-gnu -lpjsip-simple-x86_64-unknown-linux-gnu -lpjsip-x86_64-unknown-linux-gnu -lpjmedia-codec-x86_64-unknown-linux-gnu -lpjmedia-x86_64-unknown-linux-gnu -lpjmedia-videodev-x86_64-unknown-linux-gnu -lpjmedia-audiodev-x86_64-unknown-linux-gnu -lpjmedia-x86_64-unknown-linux-gnu -lpjnath-x86_64-unknown-linux-gnu -lpjlib-util-x86_64-unknown-linux-gnu  -lsrtp-x86_64-unknown-linux-gnu -lresample-x86_64-unknown-linux-gnu -lgsmcodec-x86_64-unknown-linux-gnu -lspeex-x86_64-unknown-linux-gnu -lilbccodec-x86_64-unknown-linux-gnu -lg7221codec-x86_64-unknown-linux-gnu -lyuv-x86_64-unknown-linux-gnu -lwebrtc-x86_64-unknown-linux-gnu  -lpj-x86_64-unknown-linux-gnu -lssl -lcrypto -lm -lrt -lpthread  -lasound
Cflags: -I${includedir} -g -O2 -I/usr/local/include -DPJ_AUTOCONF=1 -O2 -DPJ_IS_BIG_ENDIAN=0 -DPJ_IS_LITTLE_ENDIAN=1

В ОС, совместимых с RedHat, я получаю следующий ответ на эту команду:

$ pkg-config --cflags --libs libpjproject
-lpjsua2 -lstdc++ -lpjsua -lpjsip-ua -lpjsip-simple -lpjsip -lpjmedia-codec -lpjmedia-videodev -lpjmedia-audiodev -lpjmedia -lpjnath -lpjlib-util -lwebrtc -lsrtp -lgsm -lspeex -lspeexdsp -lpj -lssl -lcrypto -luuid -lm -lrt -lpthread

из-за этого некоторые библиотеки make не могут найти.

В Debian 9 я вижу нормальный вывод по той же команде:

-g -O2 -DPJ_AUTOCONF=1 -O2 -DPJ_IS_BIG_ENDIAN=0 -DPJ_IS_LITTLE_ENDIAN=1 -I/usr/local/include -L/usr/local/lib -lpjsua2-x86_64-unknown-linux-gnu -lstdc++ -lpjsua-x86_64-unknown-linux-gnu -lpjsip-ua-x86_64-unknown-linux-gnu -lpjsip-simple-x86_64-unknown-linux-gnu -lpjsip-x86_64-unknown-linux-gnu -lpjmedia-codec-x86_64-unknown-linux-gnu -lpjmedia-x86_64-unknown-linux-gnu -lpjmedia-videodev-x86_64-unknown-linux-gnu -lpjmedia-audiodev-x86_64-unknown-linux-gnu -lpjmedia-x86_64-unknown-linux-gnu -lpjnath-x86_64-unknown-linux-gnu -lpjlib-util-x86_64-unknown-linux-gnu -lsrtp-x86_64-unknown-linux-gnu -lresample-x86_64-unknown-linux-gnu -lgsmcodec-x86_64-unknown-linux-gnu -lspeex-x86_64-unknown-linux-gnu -lilbccodec-x86_64-unknown-linux-gnu -lg7221codec-x86_64-unknown-linux-gnu -lyuv-x86_64-unknown-linux-gnu -lwebrtc-x86_64-unknown-linux-gnu -lpj-x86_64-unknown-linux-gnu -lm -lrt -lpthread

Мой вопрос заключается в том, как сделать вывод в CentOS &Fedora такой же, как Debian?libpjproject.pc - абсолютно одинаково в обеих ОС.

1 Ответ

0 голосов
/ 06 октября 2018

На самом деле, файлы конфигурации пакета - libpjproject.pc для разных ОС не обязательно должны быть одинаковыми, поскольку они генерируются в зависимости от конфигурации системы (и пользователя).Вы не описали, как вы получили этот файл, потому что хранилище кода содержит только шаблон для него: libpjproject.pc.in . libpjproject.pc создается командой make install .Итак, я предполагаю, что вы просто скопировали его с одного компьютера на другой, однако он должен быть сгенерирован.

Итак, самый простой способ получить правильные файлы .pc - это установить pjproject:

# Debian:
sudo apt-get install libpjproject-dev
# RedHat/Centos:
sudo yum install libpjproject-devel

Обратите внимание, что pkg-config по умолчанию отключает системные выходные флаги и библиотеки, поэтому попробуйте:

$ export PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1
$ export PKG_CONFIG_ALLOW_SYSTEM_LIBS=1
$ pkg-config --cflags --libs libpjproject

Здесь Я обнаружил, что наFedora 28 pkg-config - это просто символическая ссылка на другой подобный инструмент pkgconf (какая путаница!).Согласно исходному коду он должен поддерживать эти две переменные среды, но также поддерживает две опции командной строки с одинаковым эффектом, поэтому попробуйте:

$ pkg-config --cflags --libs --keep-system-cflags --keep-system-libs libpjproject
...