You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级glibc后无法使用libtirpc构建RPC项目

解决glibc升级后RPC项目依赖libtirpc的编译链接问题

你这情况是glibc废弃传统RPC库后典型的适配坑——头文件消失、链接符号找不到,咱们一步步把它搞定:

1. 头文件引用的正确姿势(别复制目录!)

直接把tirpc目录内容复制到/usr/include/rpc的做法虽然能让编译器找到头文件,但很容易引发版本冲突,也不是标准适配方式。更优雅的方案是通过编译选项指定头文件路径,甚至不用修改代码里的#include <rpc/rpc.h>:
在CFLAGS里添加-I/usr/include/tirpc,告诉编译器去这个目录查找RPC相关头文件。

如果坚持要把代码里的头路径改成#include <tirpc/rpc/rpc.h>,那这个编译选项可以省略,但前者更能保持代码的兼容性。

2. 解决链接符号缺失问题

你遇到的undefined reference to symbol 'svcerr_noproc@@TIRPC_0.3.0'错误,核心原因是链接器找不到libtirpc库中的符号——原来glibc自带的RPC函数已经全部迁移到libtirpc库中,必须显式链接这个库才能找到对应的实现。

修改你的Makefile片段,在LDLIBS里加上-ltirpc:

# Compiler flags
CFLAGS += -g -pthread -I/usr/include/tirpc  # 新增-I指定头文件搜索路径
LDLIBS += -lnsl -ltirpc                     # 新增-ltirpc链接libtirpc库
RPCGENFLAGS =

为什么之前的做法行不通?

复制头文件只解决了编译阶段的头文件查找问题,但链接阶段需要的是libtirpc库中的函数实现,你没在链接选项里指定-ltirpc,链接器自然找不到对应的符号,才会报出DSO缺失的错误。

这样修改后,重新运行make应该就能顺利完成构建了。

内容的提问来源于stack exchange,提问作者JanW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:59:16