Linux: gcc: pkgconf: 谁添加的-I选项

文章目录

问题

今天看到一个问题说这个openssl的include目录是怎么加到编译命令里去的。从项目的代码里没找到。

可能是下面这个pkgconf做的添加。

bash 复制代码
(root@us-rhel9):/root
$ rpm -qf /usr/bin/pkgconf
pkgconf-1.7.3-10.el9.x86_64
(root@us-rhel9):/root
$ rpm -qi pkgconf-1.7.3-10.el9.x86_64
Name        : pkgconf
Version     : 1.7.3
Release     : 10.el9
Architecture: x86_64
Install Date: Thu Jun 12 15:17:48 2025
Group       : Unspecified
Size        : 77890
License     : ISC
Signature   : RSA/SHA256, Fri Sep 30 13:32:12 2022, Key ID 199e2f91fd431d51
Source RPM  : pkgconf-1.7.3-10.el9.src.rpm
Build Date  : Wed Sep 21 12:26:55 2022
Build Host  : x86-64-01.build.eng.rdu2.redhat.com
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor      : Red Hat, Inc.
URL         : http://pkgconf.org/
Summary     : Package compiler and linker metadata toolkit
Description :
pkgconf is a program which helps to configure compiler and linker flags
for development frameworks. It is similar to pkg-config from freedesktop.org
and handles .pc files in a similar manner as pkg-config.

pkgconf 是一个用于帮助编译和链接软件的工具,它主要用于检索已安装库的编译和链接标志。

pkgconf 的主要用途

简化编译过程: 当您的程序依赖于其他库(例如 OpenSSL、GTK+ 等)时,您需要告诉编译器这些库的头文件在哪里(-I 选项)以及链接器这些库文件在哪里(-L 选项)和需要链接哪些库(-l 选项)。手动查找和指定这些路径和库非常繁琐且容易出错。

pkgconf 自动化了这个过程。它通过读取库提供的 .pc (package configuration) 文件来获取这些信息。 不同的系统上,库的安装路径可能不同。使用 pkgconf,您的构建脚本(如 Makefile)无需硬编码路径,只需查询 pkgconf,它会根据当前系统的配置提供正确的路径,从而使您的项目更具可移植性。

.pc 文件还可以指定一个库所依赖的其他库。pkgconf 可以解析这些依赖关系,并提供所有必要的编译和链接标志。

pkgconf 与 pkg-config 的关系

pkgconf 是 pkg-config 工具的一个替代实现。它们的功能和命令行接口几乎完全兼容。在许多现代的 Linux 发行版和 BSD 系统中,pkgconf 已经取代了传统的 pkg-config,或者作为其默认实现。

工作原理

pkgconf 通过查找系统中的 .pc 文件来工作。这些文件通常位于 /usr/lib/pkgconfig、/usr/share/pkgconfig 或 PKG_CONFIG_PATH 环境变量指定的目录中。一个 .pc 文件包含以下信息:

Version: 库的版本。

Cflags: 编译时所需的 C/C++ 标志(例如 -I/path/to/includes)。

Libs: 链接时所需的库标志(例如 -L/path/to/libs -lfoo)。

Requires: 该库所依赖的其他 pkgconf 模块。

示例用法

例如,要获取 OpenSSL 库的编译标志:

openssl的

(root@us-rhel9):/usr/lib64/pkgconfig

$ ls -ltrh

(root@us-rhel9):/usr/lib64/pkgconfig

$ rpm -qf libssl.pc

openssl-devel-3.2.2-6.el9_5.1.x86_64

bash 复制代码
(root@us-rhel9):/usr/lib64/pkgconfig
$ more libssl.pc
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib64
includedir=${prefix}/include

Name: OpenSSL-libssl
Description: Secure Sockets Layer and cryptography libraries
Version: 3.2.2
Requires.private: libcrypto
Libs: -L${libdir} -lssl
Cflags: -I${includedir}

pkgconf --cflags openssl

要获取 OpenSSL 库的链接标志:

pkgconf --libs openssl

这些命令的输出可以直接嵌入到您的 Makefile 或构建脚本中,例如:

bash 复制代码
CFLAGS += $(shell pkgconf --cflags openssl)
LDFLAGS += $(shell pkgconf --libs openssl)

my_program: main.o
	$(CXX) $(CFLAGS) main.o -o my_program $(LDFLAGS)
相关推荐
如意.7591 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
Thera7772 小时前
C++ 高性能时间轮定时器:从单例设计到 Linux timerfd 深度优化
linux·开发语言·c++
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ3 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
安当加密4 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
内卷焦虑人士4 小时前
Windows安装WSL2+Ubuntu 22.04
linux·windows·ubuntu
dddddppppp1236 小时前
qemu模拟的一个内核驱动 io口中断
linux
程序员老赵6 小时前
超全 Docker 镜像源配置指南|Windows/Mac/Linux一键搞定,拉镜像再也不卡顿
linux·后端·容器
门豪杰7 小时前
Ubuntu下安装Claude Code
linux·运维·ubuntu·claude·claude code
总要冲动一次7 小时前
离线安装 percona-xtrabackup-24
linux·数据库·mysql·centos
桌面运维家7 小时前
Windows/Linux双启动:BIOS/UEFI多配置桌面创建指南
linux·运维·windows