Oracle Linux 6.5下安装Valgrind 3.17.0遇RDSEED指令编译错误求助
问题根因
你遇到的报错是因为Oracle Linux Server 6.5 自带的binutils工具集版本过低,配套的amd64汇编器不识别Intel后续推出的RDSEED指令,Valgrind 3.17.0的代码中默认包含了RDSEED指令的相关实现,即使configure阶段检测到汇编器不支持该指令,编译流程仍会调用相关代码导致失败。
解决方案
方案1:使用适配老系统的低版本Valgrind(最推荐)
Valgrind 3.12.0及更早版本未加入RDSEED指令相关逻辑,完全兼容OL6.5的工具链,直接下载对应版本源码后执行标准编译流程即可:
- 清理之前失败的编译目录:
make distclean - 源码解压后执行以下命令:
./configure --prefix=/usr/local/valgrind make make install
- 安装完成后将
/usr/local/valgrind/bin加入PATH环境变量即可正常使用。
方案2:修改Valgrind 3.17.0源码跳过RDSEED逻辑
如果必须使用3.17.0版本,可手动修改代码屏蔽不兼容的指令部分,该操作不会影响Valgrind核心功能,仅缺失对RDSEED指令的检测支持,老CPU环境下无使用影响:
- 执行完
./configure后,打开文件VEX/priv/guest_amd64_helpers.c - 定位到报错的3799行附近包含
rdseed指令的汇编代码块,整段注释 - 重新执行
make && make install即可完成编译。
方案3:升级binutils工具集
如果不想修改Valgrind源码,可安装2.24及以上版本的binutils,编译Valgrind时指定使用新的汇编器即可:
- 编译安装binutils到独立路径(推荐
/usr/local/binutils,避免覆盖系统默认工具链引发异常) - 编译Valgrind前先指定汇编器路径:
export AS=/usr/local/binutils/bin/as ./configure --prefix=/usr/local/valgrind make make install
内容的提问来源于stack exchange,提问作者Vijaykumar Ainapur
相关产品推荐
相关产品推荐

