Brew Doctor-“警告:在/ usr / local / include中找到未酿酒的头文件”?


77

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

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

Answers:


76

看起来您没有使用自制软件就安装了curl和nodejs。

您有两种选择:

  1. 除了永远记住这一点之外,什么也不要做,因此您不会认为它们来自家酿,并且想知道为什么家酿在抱怨。
  2. 删除它们并安装nodejs并从自制软件中卷曲。

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

我建议使用#2,因为将来可能会从homebrew安装一些依赖curl和/或node的东西,而homebrew将尝试安装那些依赖项。从源构建时,可能会使用错误的头,并且会链接不匹配的库。调试不好玩。

如果这些非自制标题文件存在原因,并且您正在使用它们编译软件,则可能需要时可以将其放回原处。如果您不使用它们构建软件,则不需要它们。继续删除它们。


我最近开始使用NodeJS进行开发,我通过打包的二进制文件将其安装在nodejs.org站点上。我不记得明确安装Curl了,但是拥有它会很有用。如果我卸载自己的nodejs并通过Homebrew重新安装,这会破坏任何东西还是一次干净的交换?
T_Conroy 2014年

应该工作。尝试一下。如果不起作用,则可以将这些标头复制回去或重新安装打包的二进制文件。如果有帮助,我可以确认我确实有来自自制软件的节点,并且这些标头都在那里。我没有自制的卷发器或那些卷发器头的卷发器。
jrwren 2014年

我认为问题是我用curl主页上的二进制文件更新了curl,并将这些标头放在此处。有什么办法让Brew忽略它们吗?我尝试通过自制软件安装curl,但是我似乎无法将brew curl设置为“默认” curl,路径更改没有效果,
T_Conroy 2014年

@Prefix无法告诉自制程序忽略它们。如果您不使用这些curl标头进行编译,则可以安全地删除它们。您可以通过确保/ usr / local / bin在/ usr / bin之前的路径中,将brew curl设置为默认值。参见stackoverflow.com/a/10343891/16998
jrwren 2014年

1
@Prefix酿酒医生曾经抱怨过/usr/local/lib/libcurl.4.dylib吗?我猜它是从curl主页二进制包中遗留下来的。ls -l /usr/local/lib/libcurl.4.dylib应该显示它是一个符号链接。如果不是符号链接,则可能来自curl主页包。如果是符号链接,则说明该软件包有问题。另外,查看的输出otool -L /usr/local/bin/curl。它应该从Cellar / curl ...而不是/ usr / local / lib链接libcurl.4.dylib。尝试冲泡松开卷曲;rm / usr / local / bin / curl; 酿造链接-强制卷曲。
jrwren 2014年

6

您可以跳过流浪头检查,以便更轻松地查看是否存在除节点/ npm以外的其他问题,以及自制软件不能很好地发挥作用

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

很好,谢谢!我使用的版本也忽略了意外的dylib和静态lib,而不仅包括: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重新安装最新版本。


-11

这个解决方案对我有用!

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

我发现此解决方案非常可怕。我发表了详尽的评论,但没有注意到此解决方案是从另一个问题的答案中复制出来的,因此我已将评论移到了那里。
唐·哈奇
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.