Search code examples
pjsippkg-config

pkg-config has different output in (Centos 7 & Fedora 28) and Debian 9


I'm working now with pjsip and found one problem. After installation this library we get following file 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

In RedHat compatible OSs I get following response on this command:

$ 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

due to this some library make cannot find.

In Debian 9 I see normal output on the same command:

-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

My question is how to make output on CentOS & Fedora the same as Debian? libpjproject.pc - absolutely the same on both OSes.


Solution

  • Actually, package config files - libpjproject.pc for different OSs don't have to be the same, since they are generated depending on system (and user) configuration. You didn't describe how did you get this file, because code repository contains only template for it : libpjproject.pc.in. The libpjproject.pc is produced by make install target. So, my guess would be that you just copied it from one machine to another, however it should be generated.

    So, the easiest way to get correct .pc files, is to install pjproject:

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

    Note that pkg-config disables by default in output default system flags and libs, so try:

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

    Here I found that on Fedora 28 pkg-config is just a symlink to another similar tool pkgconf (what a confusion!). According to source code it should support these two environment variables, but also supports two command line options with the same effect, so try:

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