【问题解决】编译用户态PCIe程序报错fatal error: pci/pci.h: No such file or directory如何处理?yum install pciutils-devel

背景

本文记录因为系统未安装PCIe用户态编译工具造成用户态PCIe程序编译报错的处理方法。

报错

pci_info.c:3:10: fatal error: pci/pci.h: No such file or directory
 #include <pci/pci.h>

在这里插入图片描述

分析

编译器无法找到 libpci 库的头文件,可能是缺少开发包或编译器搜索路径配置不正确。 因为这里是第一次编译,所以是没有安装开发包。
pci的开发包是libpci,在centos上是pciutils-devel,在ubuntu是libpci-dev
安装方法:

sudo yum install pciutils-devel

实操:
在这里插入图片描述
在这里插入图片描述
查看安装的头文件路径:
在这里插入图片描述
查看so路径:
在这里插入图片描述

再次编译:

gcc -o pci_info pci_info.c -lpci

其他可能用到的命令:
gcc -o pci_info pci_info.c -I/usr/include/pci -lpci #主动指定路径
export LD_LIBRARY_PATH=/usr/lib64/:$LD_LIBRARY_PATH
gcc -o pci_info pci_info.c -I/usr/include/pci -L/path/to/lib -lpci # -I 指定头文件路径,-L 指定库路径,-lpci 链接库。
export LD_LIBRARY_PATH=/usr/lib64/:$LD_LIBRARY_PATH
# 永久添加到 /etc/ld.so.conf.d/ 并执行 ldconfig。
# 如果 libpci 提供了 .pc 文件,可以使用 pkg-config 自动获取编译参数:gcc -o pci_info pci_info.c `pkg-config --cflags --libs libpci` 从而简化参数配置。

在这里插入图片描述

其他

pciutil开源仓库:https://git.kernel.org/pub/scm/utils/pciutils/pciutils.git
在这里插入图片描述
关于pkg-cofnig的一些信息:

  • 默认会在以下路径中查找指定的库对应的.pc 文件:
    • /usr/lib/pkgconfig
    • /usr/share/pkgconfig
    • /usr/local/lib/pkgconfig
    • /usr/local/share/pkgconfig
  • PKG_CONFIG_PATH 环境变量里指定的目录
  • cJSON的一个pkg config例子,指定了cflags lib参数,这样gcc编译的时候可以直接使用pkg-config来简化使用,使用方式:gcc cjson.c pkg-config --cflags --libs libcjson
$ cat ./cJSON/build/libcjson.pc
libdir=/usr/local/lib
includedir=/usr/local/include

Name: libcjson
Version: 1.7.15
Description: Ultralightweight JSON parser in ANSI C
URL: https://github.com/DaveGamble/cJSON
Libs: -L${libdir} -lcjson
Libs.private: -lm
Cflags: -I${includedir} -I${includedir}/cjson
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值