编译问题 fatal error: rpc/rpc.h: No such file or directory
在编译一些第三方软件的时候,会经常遇到一些文件识别不到的问题,这里整理下做个归总。
目前可能的原因有(排序分先后):
- 文件不存在;
- 文件存在但路径识别不了;
- ……
这次以常见的编译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路径下文件的识别问题,就能直接编译成功。

相关文章:
编译问题 fatal error: rpc/rpc.h: No such file or directory
在编译一些第三方软件的时候,会经常遇到一些文件识别不到的问题,这里整理下做个归总。 目前可能的原因有(排序分先后): 文件不存在;文件存在但路径识别不了;…… 这次以常见的编译lmbench测试…...
linux 安装composer
下载composer curl -sS https://getcomposer.org/installer | php下载后设置环境变量,直接通过命令composer -v mv composer.phar /usr/local/bin/composer查看版本看是否安装成功 composer -v...
数据库公共字段自动填充的三种实现方案
背景介绍 在实际项目开发中,我们经常需要处理一些公共字段的自动填充,比如: createTime (创建时间)updateTime (更新时间)createUser (创建人)updateUser (更新人) 这些字段在每个表中都存在,如果每次都手动设置会很麻烦。下面介绍三种常用的解决方案。 方案一:M…...
《MySQL 入门:数据库世界的第一扇门》
一、MySQL 简介 MySQL 是一种开源的关系型数据库管理系统,在数据库领域占据着重要地位。它以其高效查询、高安全性、低成本和扩展性著称,广泛应用于网站、企业级应用、数据分析等领域。 MySQL 具有诸多优点。首先,它成本低,作为…...
Qt之第三方库QCustomPlot使用(二)
Qt开发 系列文章 - qcustomplot(二) 目录 前言 一、Qt开源库 二、QCustomPlot 1.qcustomplot介绍 2.qcustomplot下载 3.qcustomplot移植 4.修改项目文件.pro 5.提升QWidget类 三、技巧讲解 1.拖动缩放功能 2.等待更新 总结 前言 Qt第三方…...
JAVA-类与继承
啥是继承? 在JAVA中, 继承就是子类继承父类的特征和行为,使得子类拥有父类的特征和行为,同时还可以拥有父类所没有的特征和行为。 举个例子通俗来讲,兔子和羊是食草动物类,狮子和豹子是食肉动物类&#x…...
SSH连接报错,Corrupted MAC on input 解决方法
问题描述 客户在windows CMD中SSH连接失败,报错: Corrupted MAC on input ssh_dispatch_run_fatal: Connection to x.x.x.x port 22: message authentication code incorrect值得注意的是,客户通过别的机器做SSH连接可以成功,使用putty, mo…...
【C++】8___继承
目录 一、基本语法 二、继承方式 三、对象模型 四、继承中的构造与析构的顺序 五、继承中同名成员处理 六、多继承语法 七、菱形继承 一、基本语法 好处:减少重复的代码 语法: class 子类 : 继承方式 父类 子类 也称为 派生类 父类…...
C# 中的异常处理:构建健壮和可靠的程序
C#中的异常处理(Exception Handling)。异常处理是编程中非常重要的一部分,它允许开发者优雅地处理程序运行时可能出现的错误或意外情况。通过有效的异常处理,可以使应用程序更加健壮、可靠,并提供更好的用户体验。以下…...
基于智能合约的医院凭证共享中心路径探析
一、引言 随着医疗行业的不断发展和信息技术的进步,基于智能合约的医疗凭证共享中心解决方案成为了可能。在当今数字化时代,医疗领域面临着诸多挑战,如医疗数据的分散存储、信息共享的不便捷以及凭证管理的复杂性等问题。而智能合约的出现&am…...
vba学习系列(9)--按需求计数单元格数量
系列文章目录 文章目录 系列文章目录前言一、按需求计数单元格数量1.需求 二、使用步骤1.vba源码2.整理后 总结 前言 一、按需求计数单元格数量 1.需求 一个表中有多个类型的单元格内容,比如:文字、数字、特殊字符、字母数字…… 我们要计数字母数字的…...
scale index的计算
scale index定义 基本实现 需要注意,scale index的提出者分别构建了MATLAB和R语言的实现方式。 但是,需要注意,经过我向作者求证。 MATLAB编写的代码已经“过时了”,为了拥抱时代,作者构建了R语言包,名称为…...
鸿蒙实现Web组件开发
目录: 1、简介&使用场景2、加载网络页面3、加载本地页面4、加载HTML格式的文本数据5、设置深色模式6、上传文件7、在新窗口中打开页面8、管理位置权限 1、简介&使用场景 Web是一种基于互联网的技术和资源的网络服务系统。它是指由许多互连的计算机组成的全…...
Linux——linux系统移植
创建VSCode工程 1、将NXP官方的linux内核拷贝到Ubuntu 2、解压缩tar -vxjf linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2 NXP官方开发板Linux内核编译 1、将.vscode文件夹复制到NXP官网linux工程中,屏蔽一些不需要的文件 2、编译NXP官方EVK开发板对应的Linux系统…...
工业摄像头应对复杂环境的策略与解决方案
工业摄像头需应对复杂环境,如极端温度、振动、尘土、光照不足等。为确保稳定工作,它采用了先进技术和设计。详细分析如下: 一、增强环境适应性 采用高灵敏度传感器:使用CMOS或CCD图像传感器,适应低光照条件。 高精度、…...
重生之我在异世界学编程之C语言:深入动态内存管理篇
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一 动态内存管理的必要性二 动态…...
【经典论文阅读】Latent Diffusion Models(LDM)
Latent Diffusion Models High-Resolution Image Synthesis with Latent Diffusion Models 摘要 动机:在有限的计算资源下进行扩散模型训练,同时保持质量和灵活性 引入跨注意力层,以卷积方式实现对一般条件输入(如文本或边界框…...
智能指针中的weak_ptr(弱引用智能指针)
弱引用智能指针 std::weak_ptr 可以看做是shared_ptr的助手,它不管理 shared_ptr 内部的指针。std::weak_ptr 没有重载操作符*和->,因为它不共享指针, 不能操作资源,所以它的构造不会增加引用计数,析构也不会减少引用计数,它的…...
【电子通识】机电继电器和固态继电器的区别
机电继电器 机电继电器于19世纪中叶发明。这些器件将线圈与可移动的金属触点结合使用来充当电动开关。这些器件会因为金属触点出现磨损而发生故障,例如焊死在一起。因此,在完全失效之前器件能够进行的开关周期数有限,从而限制了其总体可靠性。 一般情况下继电器控制…...
工业异常检测-CVPR2024-新的3D异常数据合成办法和自监督网络IMRNet
论文:https://arxiv.org/pdf/2311.14897v3.pdf 项目:https://github.com/chopper-233/anomaly-shapenet 这篇论文主要关注的是3D异常检测和定位,这是一个在工业质量检查中至关重要的任务。作者们提出了一种新的方法来合成3D异常数据&#x…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
