编译问题 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.mzph.cn/bicheng/63815.shtml

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

相关文章

设计模式的艺术读书笔记

设计模式的艺术 面向对象设计原则概述单一职责原则开闭原则里氏代换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则 创建的艺术创建型模式单例模式饿汉式单例与懒汉式单例的讨论通过静态内部类实现的更好办法 简单工厂模式工厂方法模式重载的工厂方法工厂方法的隐藏工厂方…

element-plus的el-tree的双向绑定

el-tree改造了下 可选可取消 有默认值 不包含父级id&#xff08;也可打开注释 包含父级id&#xff09; 默认展开 点击节点也可触发选择 节点内容自定义 <template><div class"absolute"><el-scrollbar class"pall"><div class"…

【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(三)

目录 ARC规则 概要 所有权修饰符 __strong修饰符 __weak修饰符 __unsafe_unretained修饰符 __autoreleasing修饰符 ARC规则 概要 “引用计数式内存管理”的本质部分在ARC中并没有改变&#xff0c;ARC只是自动地帮助我们处理“引用计数”的相关部分。 在编译单位上可以…

MySQL-DQL之数据多表操作

文章目录 一. 多表操作1. 表与表之间的关系2. 外键约束3. 创建外键约束表(一对多操作) 二. 多表查询1. 多表查询① 交叉连接查询(基本不会使用-得到的是两个表的乘积) [了解]&#xff08;不要记住&#xff09;② 交集运算&#xff1a;内连接查询(join)③ 差集运算&#xff1a;外…

《经验分享 · 软考系统分析师》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

宝塔面板Linux版本常用命令

宝塔面板&#xff08;BT Panel&#xff09;是一款简单易用的服务器管理工具&#xff0c;广泛应用于Linux服务器的管理。尽管宝塔提供了图形化界面&#xff0c;但在某些情况下&#xff0c;使用命令行操作更加高效。以下是宝塔面板Linux版本常用的命令&#xff0c;包括安装、管理…

ElasticSearch - 理解doc Values与Inverted Index倒排索引

文章目录 概述倒排索引&#xff1a;从图书馆的索引卡片谈起倒排索引的工作原理 docValues&#xff1a;从数据库的列式存储说起docValues的工作原理 docValues与倒排索引的对比两者的联系&#xff1a;组合使用&#xff0c;优化搜索与分析 小结 概述 在使用 Elasticsearch 进行大…

Acer宏碁Swift3笔记本S40-20,SF314-56G原厂Win10系统工厂模式安装包,带Recovery恢复还原

适用电脑型号&#xff1a;S40-20、SF314-56、SF314-56G(原装OEM预装系统) 链接&#xff1a;https://pan.baidu.com/s/1q77Br-hcmn9iJraGVVKQ7Q?pwdrw1r 提取码&#xff1a;rw1r Acer宏碁原装出厂windows10系统自带所有驱动、Office办公软件、出厂主题壁纸、系统属性专属联…

Python跳动的爱心

系列文章 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代码8Python普通的玫瑰花代码9Python炫酷的玫瑰花代码10Python多…

极验决策引擎如何凭借独特优势,弯道超车传统风控?

前言 市场上的规则决策引擎产品众多&#xff0c;但大多局限于IP、设备、账号等层面&#xff0c;提供的是现成的风控标签和规则。然而&#xff0c;真正的风控&#xff0c;需要的不仅仅是标签和规则。 极验的业务规则决策引擎与众不同&#xff0c;这款决策引擎以界面流程编排为…

windows如何使用ssh连接kali

声明&#xff1a; 昨天晚上看了小羽老师的直播课&#xff0c;心血来潮自己也想搞一下这个ssh&#xff0c;中途安装遇到了不少问题&#xff0c;电脑也是重启了好多次&#xff0c;遇到bug就重启也是解决bug的一种方法. 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&…

SpringMvc完整知识点一

SpringMVC概述 定义 SpringMVC是一种基于Java实现MVC设计模型的轻量级Web框架 MVC设计模型&#xff1a;即将应用程序分为三个主要组件&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。这种分离…

路由器、二层交换机与三层交换机的区别与应用

路由器、二层交换机和三层交换机是常见的网络设备&#xff0c;常常协同工作。它们都可以转发数据&#xff0c;但在功能、工作层级以及应用场景上存在差异。 1. 工作层级 三者在OSI模型中的工作层级不同&#xff1a; 路由器&#xff1a; 工作在 网络层&#xff08;第三层&#…

(css)element中el-select下拉框整体样式修改

(css)element中el-select下拉框整体样式修改 重点代码&#xff08;颜色可行修改&#xff09; // 修改input默认值颜色 兼容其它主流浏览器 /deep/ input::-webkit-input-placeholder {color: rgba(255, 255, 255, 0.50); } /deep/ input::-moz-input-placeholder {color: rgba…

SEC_ASA 第一天作业

拓扑&#xff1a; 实验需求&#xff1a; 注意&#xff1a;在开始作业之前必须先读“前言”&#xff0c;以免踩坑&#xff01;&#xff01;&#xff01;&#xff08;☞敢点我试试&#xff09; 按照拓扑图配置VLAN连接。 注意&#xff1a;ASA防火墙的 Gi0/1口需要起子接口&#x…

「Mac玩转仓颉内测版45」小学奥数篇8 - 排列组合计算

本篇将通过 Python 和 Cangjie 双语讲解如何计算排列与组合。这道题目旨在让学生学会使用排列组合公式解决实际问题&#xff0c;并加深对数学知识和编程逻辑的理解。 关键词 小学奥数Python Cangjie排列与组合 一、题目描述 编写一个程序&#xff0c;计算从 n 个不同元素中取…

Ungoogled Chromium127编译指南 Windows篇 - 获取源码(七)

1. 引言 在完成所有必要工具的安装和配置后&#xff0c;我们进入了Ungoogled Chromium编译过程的第一个关键阶段&#xff1a;获取源代码。本文将详细介绍如何正确获取和准备Ungoogled Chromium的源代码&#xff0c;为后续的编译工作打下基础。 2. 准备工作 2.1 环境检查 在…

人脸识别Adaface之libpytorch部署

目录 1. libpytorch下载2. Adaface模型下载3. 模型转换4. c推理4.1 前处理4.2 推理4.3 编译运行4.3.1 写CMakeLists.txt4.3.2 编译4.3.3 运行 1. libpytorch下载 参考&#xff1a; https://blog.csdn.net/liang_baikai/article/details/127849577 下载完成后&#xff0c;将其解…

Elasticsearch高性能实践

前言 本方案主要从运维层面分析es是实际生产使用过程中的参数优化&#xff0c;深入理解es各个名词及含义&#xff0c;深入分析es的使用过程中应注意的点&#xff0c;详细解释参数设置的原因以及目的&#xff0c;主要包括系统层面&#xff0c;参数层面。除此之外&#xff0c;优…

在idea中使用mysql(超详细)

一、连接mysql 在IDE开发工具中也是可以使用mysql的&#xff0c;这里以开发java常用的IntelliJ IDEA为例。 1. 打开idea&#xff0c;右上角有数据库侧边栏&#xff0c;打开侧边栏点击加号->数据源&#xff0c;可以看到支持很多数据库&#xff0c;选择mysql。 2. 首次使用需…