基于此补丁,这篇文章和这个答案,进行的(相当痛苦的)源代码安装解决方法。
$ git clone https://github.com/Echelon9/valgrind.git
$ cd valgrind
$ git checkout feature/v3.14/macos-mojave-support-v2
$ ./autogen.sh
$ ./configure --prefix=/where/you/want/it/installed --enable-only64bit
$ make
如果你收到以下错误:
No rule to make target '/usr/include/mach/mach_vm.defs’
,你需要运行
xcode-select --install
。如果你没有安装Xcode,你可能需要从应用商店安装它。完成后,你需要编辑
coregrind/Makefile
:
搜索:
am__append_19 = \
/usr/include/mach/mach_vm.defs \
/usr/include/mach/task.defs \
/usr/include/mach/thread_act.defs \
/usr/include/mach/vm_map.defs
在确保以下文件夹存在后,将每一行都添加前缀:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk
最终结果应为:
am__append_19 = \
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/mach/mach_vm.defs \
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/mach/task.defs \
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/mach/thread_act.defs \
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/mach/vm_map.defs
现在再次运行 make
,就应该能够找到这些包含文件了。但这并不一定意味着它会编译成功。我得到了以下错误提示:
vg_preloaded.c:136:19: error: expected ';' before 'const'
__private_extern__ const char *__crashreporter_info__ = "Instrumented by Valgrind " VERSION;
解决方法是添加以下代码:
#define __private_extern__ extern
到以下文件:
coregrind/m_syscall.c
coregrind/m_syswrap/syswrap-darwin.c
coregrind/vg_preloaded.c
最后,你需要交叉手指,希望没有出现其他错误:
$ make
$ make install
brew edit valgrind
命令,并在配方的头部将 "https://sourceware.org/git/valgrind.git" 替换为 "git://sourceware.org/git/valgrind.git"。 - l'L'l