pkg-config 在 (Centos 7 和 Fedora 28) 和 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

因此,某些库无法找到。

在 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.inlibpjproject.pc由 makeinstalltarget 生成。所以,我的猜测是你只是把它从一台机器复制到另一台机器,但它应该被生成。

因此,获取正确.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 28pkg-config上只是一个指向另一个类似工具pkgconf的符号链接(真是令人困惑!根据源代码,它应该支持这两个环境变量,但也支持两个具有相同效果的命令行选项,所以请尝试:

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

最新更新