当前位置: 首页 > news >正文

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

文章目录

  • 问题
  • pkgconf 的主要用途
  • 工作原理
  • openssl的

问题

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

(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 Jun1215:17:482025Group:Unspecified Size:77890License:ISC Signature:RSA/SHA256, Fri Sep3013:32:122022, Key ID 199e2f91fd431d51 Source RPM:pkgconf-1.7.3-10.el9.src.rpm Build Date:Wed Sep2112:26:552022Build 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 programwhichhelps to configure compiler and linker flagsfordevelopment frameworks. It is similar to pkg-config from freedesktop.org and handles .pc filesina 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

(root@us-rhel9):/usr/lib64/pkgconfig $morelibssl.pcprefix=/usrexec_prefix=${prefix}libdir=${exec_prefix}/lib64includedir=${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 或构建脚本中,例如:

CFLAGS+=$(shell pkgconf --cflags openssl)LDFLAGS+=$(shell pkgconf --libs openssl)my_program: main.o$(CXX)$(CFLAGS)main.o -o my_program$(LDFLAGS)
http://www.cnnetsun.cn/news/1301.html

相关文章:

  • 数据结构-双向链表(核心代码)
  • PyCharm常用快捷键
  • 玩机搞机基本常识-------全交互式的Android现代反编译器 安卓应用编译工具 强烈推荐
  • 告别API碎片化与高成本 - 用AI Ping打造下一代智能编程工作流
  • 实验记录。
  • SecureCRT SecureFX 9.7 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输
  • Magnet Axiom 9.9 Windows x64 Multilingual - 数字取证与分析
  • JetBrains IDE 2025.3 (macOS, Linux, Windows) - 跨平台开发者工具
  • Nexpose 8.32.0 for Linux Windows - 漏洞扫描
  • Sophos Firewall (SFOS) v22 正式版发布 - 下一代防火墙
  • 【AI专题】一、提示词(prompt)
  • 【AI专题】二、智能体(AI Agent)
  • 计算机毕业设计springboot博主网上招聘系统 基于 SpringBoot 的自媒体人才撮合平台 社交内容创作者在线求职与招聘系统
  • 计算机毕业设计springboot电竞网咖管理系统 基于 SpringBoot 的电竞场馆综合运营平台 融合 SpringBoot 与 Vue 的网咖智慧服务系统
  • 5-36 WPS JS宏综合实例应用-1(多工作表数据合并)
  • 5-37 WPS JS宏综合实例应用-2(一维表变二维表)
  • 5-38 WPS JS宏 综合实例应用-3(按员工职务级别大小排序)
  • 5-39 WPS JS宏 综合实例应用-4(多条件筛选记录并排序)
  • 5-40 WPS JS宏 综合实例应用-5(求字符串中的最大值记录)
  • 【人工智能】【模型】验证大模型效果的终极指南:从人工验证到自动化平台实践
  • TCP通信
  • 三极管应用:直流有刷电机H桥驱动电路——从原理到实践的完整指南
  • 基于NPN三极管的继电器驱动电路:从零开始的嵌入式工程师实战指南
  • 玩转S8050 NPN三极管:从参数选型到实战驱动一篇搞定!
  • 深入浅出玩转S8050:从数据手册到开关/放大电路实战全解析
  • C++数据结构与算法_数据结构与算法概念_定义,递归与迭代比较
  • C++数据结构与算法_数据结构与算法概念_时间复杂度
  • bootstrap前端
  • Python自动化办公全攻略:Excel/Word/PDF/邮件批量处理
  • PyAutoGUI 模拟鼠标键盘:原理解析 + 工程实践案例 + 踩坑指南