编译问题 fatal error: rpc/rpc.h: No such file or directory

在编译一些第三方软件的时候,会经常遇到一些文件识别不到的问题,这里整理下做个归总。

目前可能的原因有(排序分先后):

  1. 文件不存在;
  2. 文件存在但路径识别不了;
  3. ……

这次以常见的编译lmbench测试组件为例,说明下该类问题的排查思路。

一、问题现象

首先安装标准的流程编译lmbench,包括下载源码包、解压、然后make result,具体步骤不做阐述,可参考性能测试工具 Lmbench 的使用方法以及解析运行结果-CSDN博客。

在make result编译时碰到了找不到rpc.h这个文件错误:

二、排查思路

碰到这种问题首先要想的就是文件确实不存在,因为有很多文件是有第三方的rpm包提供的,所以先找下rpc.h这个文件属于哪个rpm包,不怕麻烦可以去每个包的spec中去搜,怕麻烦直接百度。本文中所缺的rpc.h属于libtirpc-devel.rpm这个包,发现已经安装且提供了。

既然安装了,为什么不识别呢?看了下路径确实是在/usr/include目录下的,唯一的就是多了一层tirpc子路径,所以基本可以推测是子目录不识别。接下来开始验证。首先看报错位置,为bench.h文件中的38行引用了rpc.h

所以直接修改bench.h源码:

再次编译,发现虽然报错了,但报错信息变成了rpc.h中不识别rpc/types.h,而这个types.h也是属于tirpc目录下的文件。之前我们只修改了一处rpc.h的路径,识别成功了。而这个types.h没有改,所以识别不了。但此时已经证明出,报错原因就是路径问题了。

三、问题解决

找到原因就好解决了,其实不识别文件就是因为路径问题。/usr/include是系统默认搜寻的路径,如果有自己的路径那就是通过“gcc -L /路径  或者 -l 库名称” 来解决,具体可见gcc编译手册第3章GCC online documentation- GNU Project。

一般的,软件编译都是通过script脚本控制的,这次也不例外。如果不想深入lmbench或者其他软件,最快的方法就是搜索关键字符串,其实编译中常见的那无外乎几个,如控制编译器的${CC},控制C语言编译选项的${CFLAGS},控制链接库文件的${LDLIBS},控制加载选项的${LDFLAGS}……;略微搜索一番在稍微看下脚本,基本就能锁定是哪个文件(本次搜索并阅读脚本后,发现LDLIBS定义在scripts/build文件中)。

参考网上的一个解决:

#如果遇到rpc/rpc.h:No such file or directory# yum install libtirpc-devel# 在scripts/build 中加上: # LDLIBS="${LDLIBS} -ltirpc" # CFLAGS="${CFLAGS} -I/usr/include/tirpc"

其实这个LDLIBS和CFLAGS就是编译时的宏,脚本会通过各种编译环境case的匹配,最后使得宏定义变成包含多种路径多种库目录的一个最终字符串,如果不想仔细理解scripts中的匹配规则,就可以像上述一样直接修改。

笔者本次修改略有不同,但本质一样,都是在宏定义中追加路径。

在build文件中全局解决/usr/include/tirpc路径下文件的识别问题,就能直接编译成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/487607.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小皮面板(PHPSTUDY)配置多个域名或IP

问题描述 小皮面板默认采用nginx的静态部署,按照使用nginx的习惯只需要额外添加一个server即可,但是会发现直接往配置文件里添加新的server是不生效的,小皮的官网论坛几乎已经停止维护,因此资料较少,原本也没有仔细使…

《AI行政管理:开启高效治理新时代》

一、引言 AI 行政管理能力的定义和重要性 AI 行政管理能力是指人工智能在行政管理领域的应用能力。它涵盖了多个方面,包括政府决策支持、公共服务优化、行政流程自动化、社会治理与公共安全以及政府内部管理等。在当今时代,AI 行政管理能力具有至关重要…

Golang使用etcd构建分布式锁案例

在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统。分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要。它有助于维护一致性,防止竞争条件,并确保在任何给定时间只有一个进程独占访问资源。 我们将使用Go作为编程语言&am…

数字IC后端实现常见的physical only cell都有哪些?如何添加这些cell?

数字IC后端实现阶段常见功能cell有哪些?比如AND,AOI,NAND等。 physical cell有哪些?都是干什么用的? 数字后端零基础入门系列 | Innovus零基础LAB学习Day9 (1) well tap cells:防止…

【NVIDIA orin nx 安装ultralytics yolov11】

注意:不同用户安装的python可能会在不同的路径,因此不同的pip管理会导致安装的 torch和torchvision会在不同的路径下 记得区分用户来运行yolo 一、确认系统 JetPack 版本 此处使用5.1.1 1、查看JetPack 版本 jtop二、安装 ultralytics、pytorch、torchvision、onnxruntime…

CANDENCE:过孔设置 及 如何放置过孔

过孔设置 1、 2、 3、弹出如下对话框 4、选择需要的过孔尺寸,双击 5、调节过孔优先级 6、点击 ”OK“ 完成设置 放置过孔 及 过孔选择 在PCB设计窗口 切换到走线模式 走线时,侧边栏可以选择过孔尺寸 选择好后, 双击左键放置过孔 也…

React 和 Vue _使用区别

目录 一、框架介绍 1.Vue 2.React ?二、框架结构 1.创建应用 2.框架结构 三、使用区别 1.单页面组成 2.样式 3.显示响应式数据 4.响应式html标签属性 5.控制元素显隐 6.条件渲染 7.渲染列表 react和vue是目前前端比较流行的两大框架,前端程序员应该将…

基于多视角深度学习技术的乳腺X线分类:图神经网络与Transformer架构的研究|文献速递-生成式模型与transformer在医学影像中的应用速递

Title 题目 Mammography classification with multi-view deep learning techniques:Investigating graph and transformer-based architectures 基于多视角深度学习技术的乳腺X线分类:图神经网络与Transformer架构的研究 01 文献速递介绍 乳腺X线检查是乳腺癌…

SQL项目实战与综合应用——项目设计与需求分析

项目设计与需求分析是软件开发过程中的核心环节,尤其在涉及数据库的应用时,良好的设计将直接影响到项目的可扩展性、性能和维护性。本文将深入探讨数据库设计的最佳实践,结合 C 与 SQL 的实际应用场景,涵盖项目需求收集、数据库设…

【HarmonyOS学习日志(13)】计算机网络之TCP/IP协议族(二)

文章目录 TCP/IP协议族ARPDNS标志字段:协商具体的通信方式和反馈通信状态DNS查询问题的格式资源记录(Resource Record, RR)格式:被用于应答字段、授权字段和额外信息字段 IP协议IP服务的特点无状态无连接不可靠 IP头部结构IPv4头部…

GO并发编程

一、并发编程初体验和问题 关于 Go 语言和线程的关系 Go 语言中存在线程。Go 语言的并发模型是基于 Goroutine、Processor(P)和 Machine(M,操作系统线程)的 GMP 模型。Goroutine 是 Go 语言中轻量级的执行单元&#xf…

初次使用uniapp编译到微信小程序编辑器页面空白,真机预览有内容

uniapp微信小程序页面结构 首页页面代码 微信小程序模拟器 模拟器页面为空白时查了下,有几个说是“Hbuilder编译的时候应该编译出来一个app.js文件 但是却编译出了App.js”,但是我的小程序结构没问题,并且真机预览没有问题 真机调试 根据defi…

车载语音的台架和实车测试分析

在车载测试过程中免不了要对一些特殊的业务进行深度的专项测试。比如语音识别,这个技术在汽车上也不算什么新技术,但是涉及到用户的使用,更加涉及操作的安全性,所以这块测试还是很重要的。 那么要做好语音识别的业务专项测试&…

【蓝桥杯每日一题】砍竹子

砍竹子 2024-12-7 蓝桥杯每日一题 砍竹子 STL 贪心 题目大意 这天, 小明在砍竹子, 他面前有 nn 棵竹子排成一排, 一开始第 ii 棵竹子的 高度为 h i h_i hi​. 他觉得一棵一棵砍太慢了, 决定使用魔法来砍竹子。魔法可以对连续的一 段相同高度的竹子使用, 假设这一段竹子的高度为…

Vue实现购物车(纯操作数据,不操作dom)注意:自己引入Vue.js哦

代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title>&l…

ThinkPHP开发的原生微信小程序二手物品回收小程序管理系统源码

二手物品回收小程序 一款基于ThinkPHP开发的原生微信小程序二手物品回收小程序管理系统。支持线上下单、免费上门取件、评估价格等功能。提供全部无加密源码&#xff0c;支持私有化部署。

C#实现一个HttpClient集成通义千问-多轮对话功能实现

多轮对话功能实现 视频教程实现原理消息的类型 功能开发消息类修改请求体修改发送请求函数修改用户消息输入 多轮对话的token消息完整文档消息类型 视频教程 .NetAI开发入门HttpClient实现通义千问集成-多轮对话功能实现 实现原理 一直保留更新messages 现在设置的meessages只…

vite5+vue3+Ts5 开源图片预览器上线

images-viewer-vue3&#xff1a;一款Vue3的轻量级图像查看器&#xff0c;它基于Flip动画技术&#xff0c;支持PC和h5移动网页预览照片&#xff0c;如果它是Vue3开发的产品。 npm开源地址:https://www.npmjs.com/package/images-viewer-vue3?activeTabreadme Flip 动画 < …

Axure RP在智慧农场可视化大屏系统设计中的应用

随着科技的飞速发展&#xff0c;智慧农业已成为现代农业的重要发展方向。智慧农场可视化大屏系统作为智慧农业的重要组成部分&#xff0c;正逐步成为农场管理、决策和展示的核心工具。Axure RP&#xff0c;作为一款强大的原型设计工具&#xff0c;其在智慧农场可视化大屏系统的…

Docker多架构镜像构建踩坑记

背景 公司为了做信创项目的亮点&#xff0c;需要将现有的一套在X86上运行的应用系统迁移到ARM服务器上运行&#xff0c;整个项目通过后端Java&#xff0c;前端VUEJS开发通过CICD做成Docker镜像在K8S里面运行。但是当前的CICD产品不支持ARM的镜像构建&#xff0c;于是只能手工构…