当我运行brew doctor
时,会抛出以下错误
Warning: Unbrewed header files were found in /usr/local/include.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.
Unexpected header files:
/usr/local/include/curl/curl.h
/usr/local/include/curl/curlbuild.h
/usr/local/include/curl/curlrules.h
/usr/local/include/curl/curlver.h
/usr/local/include/curl/easy.h
/usr/local/include/curl/mprintf.h
/usr/local/include/curl/multi.h
/usr/local/include/curl/stdcheaders.h
/usr/local/include/curl/typecheck-gcc.h
/usr/local/include/node/ares.h
/usr/local/include/node/ares_version.h
/usr/local/include/node/nameser.h
/usr/local/include/node/node.h
/usr/local/include/node/node_buffer.h
/usr/local/include/node/node_internals.h
/usr/local/include/node/node_object_wrap.h
/usr/local/include/node/node_version.h
/usr/local/include/node/openssl/opensslconf.h
/usr/local/include/node/uv-private/ngx-queue.h
/usr/local/include/node/uv-private/stdint-msvc2008.h
/usr/local/include/node/uv-private/tree.h
/usr/local/include/node/uv-private/uv-bsd.h
/usr/local/include/node/uv-private/uv-darwin.h
/usr/local/include/node/uv-private/uv-linux.h
/usr/local/include/node/uv-private/uv-sunos.h
/usr/local/include/node/uv-private/uv-unix.h
/usr/local/include/node/uv-private/uv-win.h
/usr/local/include/node/uv.h
/usr/local/include/node/v8-debug.h
/usr/local/include/node/v8-preparser.h
/usr/local/include/node/v8-profiler.h
/usr/local/include/node/v8-testing.h
/usr/local/include/node/v8.h
/usr/local/include/node/v8stdint.h
/usr/local/include/node/zconf.h
/usr/local/include/node/zlib.h
删除这些文件安全吗?解决此警告的最佳方法是什么?
看起来您安装curl和nodejs时没有使用自制软件。
你有两个选择:
- 除了永远记住这一点,别无选择,这样你就不会认为它们来自自制软件,也不会想知道自制软件为什么会抱怨
- 删除它们并从自制程序中安装nodejs和curl
1是一种简单的方法,直到它不是
我推荐#2,因为在未来,你可能会从依赖于curl和/或node的自制程序中安装一些东西,自制程序会尝试安装这些依赖项。从源代码构建时,可能会使用错误的头文件,并链接不匹配的库。这不是一个有趣的调试。
如果这些非自制的头文件是有原因的,并且你正在用它们编译软件,那么如果你需要的话,你可能可以把它们放回去。如果你不使用它们构建软件,那么你就不需要它们。现在就删除它们。
您可以跳过杂散标头检查,以便更容易地查看是否存在除node/npm之外的其他问题,无法很好地使用自制
brew doctor `brew doctor --list-checks | grep -v stray_headers`
保留这些文件可能是安全的,除非您遇到与其他Homebrew公式的构建或链接问题;brew doctor
输出是建议性的,而非规范性的。
如果您认为没有理由针对/usr/local中的curl或node版本进行构建,则可以删除这些头文件;您随时可以稍后使用Homebrew重新安装最新版本。
我会将它们复制到一个文件(tmpKill
)中,然后运行:
xargs -0 -n 1 rm -rf < <(tr \n \0 <tmpKill)
这样就很容易杀死他们。最左边的命令生成一组行,在这些行上运行rm -rf
命令(删除文件)。-n
指令确保每个条目只运行一次命令(rm -rf
)。
我今天(2021年11月19日)也出现了同样的错误,我在GitHub上发现了这一讨论,这有助于修复它。https://github.com/Homebrew/discussions/discussions/1512
我实际上得到了3个警告:
警告:自制/自制核心未正确敲击!运行:rm-rf"/usr/local/Homebrew/Library/Taps/Homebrew/Homebrew-core";酿造龙头自制/核心
警告:在/usr/local/include中找到了未重写的头文件。如果你不是故意把它们放在那里,它们可能会在正在构建Homebrew公式,并且可能需要删除。
警告:某些抽头不在默认的git原点分支上,可能无法接收更新。如果这让您感到意外,请使用以下内容查看默认分支:git-C$(brew-repo-homebrew/core)结账主
我运行了这两个命令,它解决了问题:
> rm -rf "/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core"
> brew tap homebrew/core
这个解决方案对我很有效!
sbom -f -l -s -pf /var/db/receipts/org.nodejs.pkg.bom | while read f; do sudo rm /usr/local/${f}; done
sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.*