Brew doctor - “警告:在 /usr/local/include 中找到未编译的头文件”?

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

当我运行

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

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

homebrew brew-doctor
7个回答
114
投票

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

您有两个选择:

  1. 除了永远记住这一点之外,什么都不做,这样你就不会认为它们来自自制程序,并且想知道为什么自制程序会抱怨。
  2. 删除它们并从自制软件安装nodejs和curl。

1 是最简单的方法,直到它不是。

我推荐#2,因为将来您可能会从自制程序安装依赖于curl和/或节点的东西,并且自制程序将尝试安装这些依赖项。从源代码构建时,可能会使用错误的标头并且链接的库不匹配。调试起来并不有趣。

如果这些非自制头文件的存在是有原因的,并且您正在使用它们编译软件,那么如果您需要它们,您可能可以将它们放回去。如果您不使用它们构建软件,那么您就不需要它们。现在就删除它们吧。


14
投票

您可以跳过杂散标头检查,以便更轻松地查看是否存在除 Node/npm 无法与自制程序良好配合之外的问题

brew doctor `brew doctor --list-checks | grep -v stray_headers`

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
) 每个条目仅运行一次。


0
投票

我今天(2021 年 11 月 19 日)遇到了同样的错误,我在 GitHub 上发现了这个讨论,这有助于修复它。 https://github.com/Homebrew/discussions/discussions/1512

我实际上收到了 3 个警告:

警告:Homebrew/homebrew-core 未正确利用!跑步: rm -rf“/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core” 酿造水龙头自制/核心

警告:在 /usr/local/include 中发现未编译的头文件。 如果您不是故意将它们放在那里,那么它们可能会导致问题 构建 Homebrew 公式,可能需要删除。

警告:某些点击不在默认的 git origin 分支上,可能收不到 更新。如果这让您感到惊讶,请使用以下命令检查默认分支: git -C $(brew --repo homebrew/core) checkout master

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

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

0
投票

我自己也遇到了这个问题,这是帮助我的解决方案:https://stackoverflow.com/a/77863320/9024807


-15
投票

这个解决方案对我有用!

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.*
© www.soinside.com 2019 - 2024. All rights reserved.