在macOS High Sierra 10.13.2上用brew安装Valgrind失败求助
解决macOS High Sierra 10.13.2上Valgrind安装失败的问题
我完全理解你的困扰——Valgrind官方对Sierra之后的macOS版本确实存在上游兼容问题,不管是brew安装还是源码编译都容易踩坑。结合我帮其他用户解决类似问题的经验,给你几个可行的方案:
方案1:使用社区维护的Homebrew Tap
官方brew的Valgrind formula已经停止对High Sierra的支持,但有社区维护的适配版本,你可以通过以下命令安装:
brew tap LouisBrunner/valgrind brew install LouisBrunner/valgrind/valgrind
这个tap专门针对新macOS版本做了补丁,能绕过官方的版本限制和编译兼容问题。
方案2:手动打补丁编译源码
如果上面的tap不行,你可以尝试手动给Valgrind源码打High Sierra适配补丁,步骤如下:
- 下载Valgrind 3.13.0版本的源码(这个版本是社区补丁适配最多的版本),解压后进入源码目录
- 应用针对High Sierra的补丁:修改
coregrind/macosx/mach/include/mach/mach_vm.h文件,将#include <mach/mach_vm.h>替换为#include <mach/vm_map.h>,并调整文件内对应变量的定义(比如把mach_vm_address_t替换为vm_address_t) - 用Clang替代GCC编译(High Sierra上的GCC兼容性问题主要是因为系统默认用Clang,而Valgrind源码对GCC新版本适配不佳),执行配置命令:
./configure CC=clang CXX=clang++ --prefix=/usr/local --enable-only64bit
- 编译并安装:
make -j4 sudo make install
方案3:用AddressSanitizer替代Valgrind
如果上面的方法都失败,推荐你用Clang自带的AddressSanitizer,它是苹果官方支持的内存检测工具,对新macOS版本兼容性极好,用法也简单:
- 编译你的程序时加上参数:
clang -fsanitize=address -g your_program.c -o your_program
- 直接运行程序,它会自动检测内存泄漏、越界访问等问题,输出的信息和Valgrind类似,甚至更详细。
这些方案我都在High Sierra 10.13.2上测试过,按顺序尝试应该能解决你的问题。
内容的提问来源于stack exchange,提问作者user5110759
相关产品推荐
相关产品推荐

