pkg-config 在 (Centos 7 & Fedora 28) 和 Debian 9 中有不同的输出
pkg-config has different output in (Centos 7 & Fedora 28) and Debian 9
我现在正在使用 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 - 在两个操作系统上完全相同。
实际上,不同操作系统的包配置文件 - 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
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应该支持这两个环境变量,而且还支持两个命令行选项,效果一样,所以试试:
$ pkg-config --cflags --libs --keep-system-cflags --keep-system-libs libpjproject
我现在正在使用 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 - 在两个操作系统上完全相同。
实际上,不同操作系统的包配置文件 - 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
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应该支持这两个环境变量,而且还支持两个命令行选项,效果一样,所以试试:
$ pkg-config --cflags --libs --keep-system-cflags --keep-system-libs libpjproject