23

我正在尝试在带有 Snow Leopard 的 Mac 上安装 Valgrind,但出现错误。这就是我在终端中输入的内容。

$ curl -O http://valgrind.org/downloads/valgrind-3.8.1.tar.bz2
$ md5sum valgrind-3.8.1.tar.bz2
$ tar -xjvf valgrind-3.8.1.tar.bz2
$ cd valgrind-3.8.1
$ ./configure
$ make

这是我得到的错误。

Making all in coregrind
make[2]: *** No rule to make target `/usr/include/mach/mach_vm.defs', needed by `m_mach/mach_vmUser.c'.  Stop.
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

我该如何纠正这个错误?

4

4 回答 4

87

确保安装命令行工具。

xcode-select --install
于 2015-05-27T01:28:48.040 回答
5

正确编译 valgrind 的最佳方法是使用上述答案中提到的“xcode-select --install”命令。但是,作为次优 hack,您可以通过将以下文件从OSX /mach 源下载到 /usr/include/mach 来编译它(创建此目录):

mach_vm.defs    
task.defs
thread_act.defs
vm_map.defs

这是一个有点脏的 hack,但如果你真的不想下载/安装大型 Xcode 原始文件,它应该能让你继续前进。

于 2016-01-03T12:05:10.697 回答
4

显然,要在 Macintosh 上编译,valgrind 需要/usr/include/mach/mach_vm.defs存在该文件。虽然我无法找到关于mach_vm.defs成为 XCode 一部分的具体参考资料,但似乎大多数常用内容/usr/include/mach都是在 XCode 安装时安装的。

如果由于某种原因您无法在您的机器上安装 XCode,您可以从苹果开源网站的这一部分获取该特定目录的大部分源文件。

于 2012-11-16T22:53:06.587 回答
2

自从 OSX 上安装了系统完整性保护系统以来,用户,即使不是 root,也可以修改/usr. 因此,修改 /usr/include/mach 以添加必要的文件变得不可能。现在唯一的选择是编辑生成文件本身。

手头的 Makefile 应位于coregrind/Makefile,而 mach 文件应位于附近/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/(将 MacOSX10.12.sdk 替换为适当版本的 OSX)。

应该am__append_17在第 160 行左右定义一个名为的符号(对于不同的版本,可能在其他地方)。

它应该看起来像这样:

am__append_17 = \
    /usr/include/mach/mach_vm.defs \
    /usr/include/mach/task.defs \
    /usr/include/mach/thread_act.defs \
    /usr/include/mach/vm_map.defs

用 替换每个实例/usr/include/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/使其看起来像:

am__append_17 = \
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/mach/mach_vm.defs \
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/mach/task.defs \
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/mach/thread_act.defs \
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/mach/vm_map.defs

在此之后,valgrind 应该可以正确编译

于 2018-05-27T03:36:08.247 回答