Brew doctor - “警告:在 /usr/local/include 中发现了未安装的头文件”?

115
当我运行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

删除这些文件是否安全?解决此警告的最佳方法是什么?

6个回答

113

看起来你是没有使用homebrew安装curl和nodejs。

你有两个选择:

  1. 什么也不做,永远记住这一点,以便你不认为它们来自homebrew并想知道为什么homebrew在抱怨。
  2. 删除它们并从homebrew安装nodejs和curl。

选择1很容易,直到它变得困难。

我推荐选择2,因为在将来,你可能会安装一些依赖于curl和/或node的软件。当从源代码构建时,可能会使用错误的头文件并链接不匹配的库。这很难调试。

如果那些非homebrew的头文件出于某种原因存在,并且你正在使用它们编译软件,那么你可能能够在需要时将它们放回去。如果你不使用它们构建软件,那么你不需要它们。现在可以将它们删除。


1
我最近开始使用NodeJS进行开发,我是通过nodejs.org网站上的打包二进制文件安装的。我不记得明确安装过Curl,但它会很有用。如果我卸载我的nodejs并通过Homebrew重新安装它,这会破坏任何东西还是干净的替换? - tdc
1
@前缀 没有办法告诉homebrew忽略它们。如果您不使用这些curl头文件进行编译,则可以安全地将它们删除。您可以通过确保/usr/local/bin在/usr/bin之前出现在路径中来设置brew curl为默认程序。请参见https://dev59.com/0Gkv5IYBdhLWcg3wxz2A#10343891 - jrwren
1
@Prefix,brew doctor 是否曾经抱怨过 /usr/local/lib/libcurl.4.dylib?我猜它是从 curl 主页二进制软件包中遗留下来的。ls -l /usr/local/lib/libcurl.4.dylib 应该显示它是一个符号链接。如果它不是符号链接,则很可能是来自 curl 主页软件包。如果它是一个符号链接,则说明该软件包存在问题。此外,查看 otool -L /usr/local/bin/curl 的输出。它应该将 libcurl.4.dylib 从 Cellar/curl... 链接过来,而不是从 /usr/local/lib 中。尝试使用 brew unlink curl; rm /usr/local/bin/curl; brew link --force curl。 - jrwren
问题是,我不想每次更新时都将Node更新到最新版本,而且我正在升级brew中的所有应用程序,并使用brew在我想要的地方安装这些应用程序的最新版本。如果有一种方法可以在brew中排除某些应用程序的自动升级就好了。 - amar
在我的情况下,我卸载了 brew uninstall python@3.10 mono pdm 然后运行 brew autoremove; brew cleanup。然后 rm -rf /usr/local/header/python3.9(删除任何文件夹中的 python 3.x),错误从 brew doctor 中消失了。我建议读者使用 pyenv 安装(许多)不同的 Python 版本。 - VimNing
显示剩余6条评论

14
您可以跳过杂项的标题检查,这样就更容易看出除了 node/npm 与 homebrew 不兼容之外是否存在其他问题。
brew doctor `brew doctor --list-checks | grep -v stray_headers`

不错,谢谢!我使用的版本还会忽略意外的dylibs和static libs,而不仅仅是includes:brew doctor $(brew doctor --list-checks | grep -vE 'check_for_stray_(dylibs|static_libs|headers)') - waldyrious

3

除非您在其他Homebrew公式的构建或链接问题中遇到问题,否则可以放心地将这些文件留在原处;brew doctor的输出是咨询性的,而不是规范性的。

如果您认为您没有理由针对/usr/local中的curl或node版本进行构建,则可以删除那些头文件;您总是可以使用Homebrew重新安装最新版本。


1

我会将它们复制到一个文件(tmpKill)中,然后运行:

xargs -0 -n 1 rm -rf < <(tr \\n \\0 <tmpKill)

这使得杀死它们变得容易。最左边的命令生成一组行,其中运行rm -rf命令(删除文件)。-n指令确保每个条目只运行一次命令(rm -rf)。


你的“kill them all”意味着删除文件,有点误导性。 - Raptor

0

今天(2021年11月19日)我遇到了同样的错误,并在GitHub上找到了这个讨论,帮助我解决了问题。https://github.com/Homebrew/discussions/discussions/1512

实际上,我得到了三个警告:

警告:Homebrew/homebrew-core没有正确安装!运行: rm -rf "/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core" brew tap homebrew/core

警告:在/usr/local/include中发现了未经过 brew 安装的头文件。 如果您没有故意将它们放在那里,当构建 Homebrew 公式时,它们可能会导致问题,需要删除。

警告:某些 Tap 不在默认的 git origin 分支上,可能无法接收 更新。如果这对您来说是一个惊喜,请使用以下命令查看默认分支: git -C $(brew --repo homebrew/core) checkout master

我运行了这两个命令,问题得以解决:

> rm -rf "/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core"
> brew tap homebrew/core

-14

这个解决方案对我很有用!

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.*

我觉得这个解决方案非常可怕。我已经发表了一条评论进行阐述,但没有注意到这个解决方案是从另一个问题的答案中复制过来的,所以我把我的评论移到那里了。 - Don Hatch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接