升级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
相关产品推荐
相关产品推荐

