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

编译问题 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路径下文件的识别问题,就能直接编译成功。

相关文章:

编译问题 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…...

Argo CD 集成 Helmfile 插件:实现 GitOps 下复杂应用声明式部署

1. 项目概述与核心价值如果你正在使用 Argo CD 管理 Kubernetes 集群,并且你的应用清单是由 Helmfile 来编排的,那么travisghansen/argo-cd-helmfile这个项目很可能就是你一直在寻找的“粘合剂”。简单来说,它是一个专门为 Argo CD 设计的 He…...

光纤偏振测量:从琼斯矢量到庞加莱球,六种工具深度解析与工程实践

1. 从一道周五小测题说起:光纤测量中的偏振态表征上周五,我在整理旧资料时,翻到了EE Times在2015年发布的一篇“周五小测”文章,主题是光纤光学测量。其中第一道题就很有意思,它问的是:“以下哪种工具不能用…...

YouTube 转 MP3 工具里,为什么预览要放在下载前

很多转换工具看起来解决的是“我要一个 MP3 文件”,但真正影响体验的,往往不是页面上有没有下载按钮。 用户真正想确认的是:这个链接是不是被正确识别了,转换任务是不是还在进行,最后得到的音频是不是值得保存。对 Yo…...

嵌入式固件安全更新与密钥管理实践

1. 嵌入式固件安全更新概述在嵌入式系统开发中,固件更新是设备生命周期管理的关键环节。不同于传统PC软件的更新,嵌入式设备的固件更新面临更多挑战:受限的计算资源、不稳定的通信环境、严苛的安全要求等。我曾参与过多个工业控制设备的OTA升…...

memrok:专为开发者设计的命令行记忆管理工具,提升项目效率

1. 项目概述:一个面向开发者的记忆管理工具最近在整理个人知识库和项目代码时,我常常被一个问题困扰:那些零散但关键的代码片段、临时的配置参数、一闪而过的调试思路,到底应该记在哪里?用笔记软件太笨重,用…...

Specky:规范驱动开发平台,从AI氛围编程到确定性工程实践

1. Specky:一个重新定义AI辅助开发的确定性工程平台如果你和我一样,在过去几年里深度使用过GitHub Copilot、Claude Code这类AI编程助手,你肯定经历过那种又爱又恨的矛盾感。爱的是,它们确实能快速生成代码片段,把我们…...

彻底告别Ubuntu 20.04休眠唤醒黑屏:除了降级驱动,你还可以这样一劳永逸地禁用挂起

彻底告别Ubuntu 20.04休眠唤醒黑屏:系统级电源管理优化指南 如果你正在使用Ubuntu 20.04并频繁遭遇休眠唤醒后的黑屏问题,这篇文章将为你提供一套完整的解决方案。不同于常见的驱动降级方案,我们将从系统配置层面入手,通过调整电源…...

用微信小程序点灯!STC89C51+ESP8266物联网入门实战(附完整源码)

用微信小程序点灯!STC89C51ESP8266物联网入门实战(附完整源码) 当你第一次看到手机上的按钮能控制真实世界的灯泡时,那种"魔法成真"的震撼感,正是物联网的魅力所在。本文将带你用不到百元的硬件成本&#xf…...

Python地理空间数据处理技能库geoskills:简化GIS分析,提升开发效率

1. 项目概述:一个面向地理空间数据处理的技能库最近在GitHub上闲逛,发现了一个挺有意思的项目,叫geoskills,来自一个叫Cognitic-Labs的组织。光看名字,geo和skills的组合,就让我这个常年和数据打交道的人眼…...

用C语言手搓一个聊天室服务器:从socket到多线程的保姆级踩坑实录

用C语言手搓一个聊天室服务器:从socket到多线程的保姆级踩坑实录 深夜两点,屏幕的蓝光映在脸上,第17次编译失败后,我盯着gcc报出的"segmentation fault"陷入了沉思。这就是用C语言实现网络服务的魅力所在——没有现成的…...