为什么我在 Apple Silicon 上使用带有 j 标志的 make 时权限被拒绝?

问题描述 投票:0回答:1

我有一个简单的 make 文件,它使用 /opt/homebrew/opt/llvm/bin/clang 编译一堆 c 文件。我有两台机器(Intel Mac 和 Apple M1 Max)都运行 macOS 12.7.3。

在 Intel Mac 上:make 和“make -j8”都可以按预期毫无问题地编译所有文件。

在 Apple M1 Max 上:当我在没有任何标志的情况下运行 make 时,它会毫无问题地编译所有文件。但是,如果运行 “make -j8”,我得到: make:/opt/homebrew/opt/llvm/bin/clang:权限被拒绝。如果我运行 "sudo make -j8",那么我不会被拒绝。

为什么在 Apple M1 Max 上运行 make 会导致权限被拒绝,而在 Intel Mac 上却不会,即使两者都运行 macOS 12.7.3 并且都使用相同版本的 clang (17.0.6)?

我尝试更改 /opt/homebrew/opt/llvm/bin/clang 的所有者和权限。我尝试了许多不同的 make 文件(都有相同的问题)。我尝试更改线程数。 “-j1”有效,但“-j2”及更高版本失败。我原以为在 Apple M1 Max 上使用 -j8 会简单地使用多个线程来更快地编译所有文件。 Apple M1 Max 芯片中是否存在某些安全功能,可以阻止用户在终端中运行多线程作业?我的帐户具有管理员权限。

multithreading makefile clang apple-m1
1个回答
0
投票

编者注:我已将其从问题移至答案,并将答案标记为社区所有。 OP,如果您想将此作为您自己的答案发布,请发表评论并要求我删除此内容,这样它就不会用您自己的答案来完成。

使用

gmake
可能需要首先从 Homebrew 等安装它。


在两个系统上:

zsh% type -a make
make is /usr/bin/make

zsh% make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i386-apple-darwin11.3.0

当我切换到

gmake
时,两台机器上的一切都工作正常。所以罪魁祸首就是苹果古老的
make
。感谢 John Bollinger 和 MadScientist 为我指明了正确的方向!

© www.soinside.com 2019 - 2024. All rights reserved.