RHEL 6.8에서 pkg-config --cflags openssl이 아무것도 반환하지 않는 이유는 무엇입니까?

RHEL 6.8에서 pkg-config --cflags openssl이 아무것도 반환하지 않는 이유는 무엇입니까?

저는 RHEL 6.8 Linux 시스템에서 실행 중입니다. 소스 tarballs/git-repos/whatefer에서 다양한 패키지를 빌드하려고 합니다.없이시스템 구성 변경(루트 또는 sudo 아래)

RHEL 6.8 시스템에서 실행 중입니다.

bash-4.1$ cat /etc/issue
Red Hat Enterprise Linux Workstation release 6.8 (Santiago)
Kernel \r on an \m

openssl-devel설치되었습니다:

bash-4.1$ rpm -q -a | grep openssl
openssl-1.0.1e-48.el6.i686
openssl098e-0.9.8e-20.el6_7.1.x86_64
openssl098e-0.9.8e-20.el6_7.1.i686
openssl-devel-1.0.1e-48.el6.i686
openssl-1.0.1e-48.el6.x86_64
openssl-devel-1.0.1e-48.el6.x86_64

따라서 이 명령이 일부 출력을 반환할 것으로 예상하므로 pkg-config를 사용하는 소스에서 패키지를 빌드할 때 필요한 CFLAGS 값을 찾을 수 있습니다.

bash-4.1$ pkg-config --cflags openssl

그러나 그것은 개행 문자만을 반환합니다. 왜?

추가 디버깅:

사용 중인 파일을 표시합니다.

bash-4.1$ pkg-config --debug --list-all 2>&1 | grep 'Will find package.*openssl'
Will find package 'openssl' in file '/usr/lib64/pkgconfig/openssl.pc'

읽어야 할 파일을 표시합니다.

bash-4.1$ cat /usr/lib64/pkgconfig/openssl.pc
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib64
includedir=${prefix}/include

Name: OpenSSL
Description: Secure Sockets Layer and cryptography libraries and tools
Version: 1.0.1e
Requires: 
Libs: -L${libdir} -lssl -lcrypto
Libs.private: -Wl,-z,relro -ldl -lz -L/usr/lib -lgssapi_krb5 -lkrb5 -lcom_err -lk5crypto -lresolv
Cflags: -I${includedir} -I/usr/include

grep 확장:

bash-4.1$ pkg-config --debug --list-all 2>&1 | grep 'openssl'
File 'openssl.pc' appears to be a .pc file
Will find package 'openssl' in file '/usr/lib64/pkgconfig/openssl.pc'
Looking for package 'openssl'
Looking for package 'openssl-uninstalled'
Reading 'openssl' from file '/usr/lib64/pkgconfig/openssl.pc'
Parsing package file '/usr/lib64/pkgconfig/openssl.pc'
Unknown keyword 'Libs.private' in '/usr/lib64/pkgconfig/openssl.pc'
Removing -I/usr/include from cflags for openssl
Removing -I/usr/include from cflags for openssl
Removing -L /usr/lib64 from libs for openssl
Adding 'openssl' to list of known packages, returning as package 'openssl'
openssl                     OpenSSL - Secure Sockets Layer and cryptography libraries and tools
bash-4.1$ 

흠 저게 거기서 뭐하는 거야 Removing -I/usr/include from cflags for openssl?

또한 Cflags변수가 정의됩니다. 그게 버그인가요? 대신 그래야 할까요 cflags?

또한 내 자신의 버전 0.29.2를 다운로드하여 구축했는데 pkg-config동일한 동작을 제공합니다. 그래서 파일에 버그가 있는 것으로 의심되지만 openssl.pc확실하지 않습니다.

그럼에도 불구하고 다양한 패키지 스크립트를 호출하기 직전에 CFLAGS하드 코딩된 값을 내보내는 것 외에 해결 방법은 무엇입니까 ?LDFLAGS./configure

답변1

pkg-config중복된 플래그를 제거하고 /usr/include와 같은 "기본" 경로도 건너뛰는 것처럼 보입니다 .

보다,

$ printf "Name: whatever\nVersion: 1\nDescription: bla\nCflags: -I/usr/include" > /tmp/x.pc
$ pkg-config --cflags  /tmp/x.pc

$ printf "Name: whatever\nVersion: 1\nDescription: bla\nCflags: -I/usr/includeX" > /tmp/y.pc
$ pkg-config --cflags  /tmp/y.pc
-I/usr/includeX

이러한 기본 디렉터리는 pkg-config의 빌드 시 설정됩니다. 소스의 README.md를 참조하세요.

./configure \
     --prefix=/opt/pkgconf \
     --with-system-libdir=/lib:/usr/lib \
     --with-system-includedir=/usr/include

환경 변수를 통해 런타임 시 해당 동작을 비활성화할 수 있습니다.

$ PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 pkg-config --cflags  /tmp/x.pc
-I/usr/include

또는 내장된 기본값을 재정의합니다.

$ PKG_CONFIG_SYSTEM_INCLUDE_PATH="/whatever" pkg-config --cflags  /tmp/x.pc
-I/usr/include

최근 pkg-config에는 명령줄 옵션도 --keep-system-cflags있으며--keep-system-libs

관련 정보