【问题标题】:Xlib.h not found when building graphviz on Mac OS X 10.8 (Mountain Lion)在 Mac OS X 10.8 (Mountain Lion) 上构建 graphviz 时未找到 Xlib.h
【发布时间】:2012-07-12 23:53:44
【问题描述】:

当使用 homebrew 安装 graphviz 时,脚本到达“在 tkstubs 中安装”,然后抛出以下致命错误:

In file included from tkStubLib.c:15:
/usr/include/tk.h:78:11: fatal error: 'X11/Xlib.h' file not found
#include <X11/Xlib.h>

我已经安装了 XQuartz,因为 X11 已在 Mountain Lion 中被删除,但我不确定它是否安装正确。 Xlib.h的位置是:

/opt/X11/include/X11/Xlib.h

还有两个指向 /opt/X11 的符号链接,它们是:

/usr/X11
/usr/X11R6

您认为这是正确的设置吗?直到昨天我才处理过 X11 或 XQuartz。

干杯。

【问题讨论】:

    标签: x11 graphviz homebrew osx-mountain-lion


    【解决方案1】:

    您需要告诉tkstubs 构建(可能还有包中的其他位)在/opt/X11/include 中查找标头;这不在标准包含路径上。

    通常这是通过将-I/opt/X11/include 作为附加编译器标志传递来实现的,但是这样做的方法取决于构建系统。

    对于相当现代的configure 脚本,最好的方法是在环境变量CPPFLAGS 中传递它;如果包使用了另一个构建系统,或者由于其他原因无法正常工作,那么您需要查看构建目录中的Makefile

    【讨论】:

    • CPPFLAGS 用于预处理器标志——C++ 编译器调用应该尊重这些。 CFLAGS 中只有 C 标志,CXXFLAGS 中只有 C++ 标志。
    • 啊是的当然...早上太早了,我想我猜... :)
    • 完美。我将此添加到 ruby​​ 脚本中:ENV.append 'CFLAGS', '-I/opt/X11/include' 并且它安装得很好。谢谢。
    【解决方案2】:

    安装 XQuartz 后,您只需输入一个符号链接到您的 X11 安装文件夹即可

    ln -s /opt/X11/include/X11 /usr/local/include/X11
    

    在终端中。这也将解决问题,而无需更改任何 ruby​​ 脚本。

    【讨论】:

    • 然后显示ld: library not found for -lX11,如何解决?
    【解决方案3】:

    我通过将 x11 头文件目录复制到 /opt/local/include 目录来安装它。可能不是解决它的最佳方法,但快速简便。

    【讨论】:

      【解决方案4】:

      您可以在编译/链接(或 brew)命令之前输入您的 shell:

      export CPPFLAGS=-I/opt/X11/include
      

      导出行将告诉编译/链接器在 /opt/X11/include 中查找 X11 包含文件

      【讨论】:

      • 这里也一样。在小牛队工作。就我而言,路径是这样的:export CPPFLAGS=-I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers;
      【解决方案5】:

      由于 make 文件在寻找 X11/xlib.h 即在当前目录中寻找 X11 文件夹,解决这个问题的一种方法是简单地将 /opt/X11/include/X11 目录复制到包含 make 文件的目录。

      【讨论】:

        【解决方案6】:

        如果您需要它在您的 CMake 构建中工作:

        if(APPLE)
           include_directories(AFTER "/opt/X11/include")
        endif()
        

        这对我来说效果很好。

        【讨论】:

          【解决方案7】:

          我在 OS X 上尝试从源代码编译 ffmpeg 时发现了这个线程。我需要 --enable-x11grab 并且自制版本不支持此选项。

          我已经安装了 XQuartz,但我不断收到来自 ./configure:ERROR: Xlib not found 的错误。我以为这里的答案可以解决我的问题,但他们没有!

          所以,如果有人在同一条船上,我的解决方案是:

          我打开生成的config.log,发现很多错误涉及各种包含和头文件,包括 X11/Xlib.h - 这是误导性的。在日志文件的最底部是关键,pkg-config 抱怨寻找xbc.pc,并要求将其放在路径上。但是,终端上显示的错误消息并没有说明pkg-configxbc

          解决方案是添加到您的PKG_CONFIG_PATH 环境变量中。我的不存在,所以我只做了export PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig/(我找到xbc.pc的文件夹)。

          我重新运行configure,一切都像魅力一样!

          TL;DR:检查 config.log - 不要相信终端输出!

          【讨论】:

          • 非常感谢这篇文章。我在 OSX 上运行,根本问题是它运行的是 clang 而不是 gcc。如果没有此评论,我绝不会想到查看日志文件。谢谢! :)
          【解决方案8】:

          遇到同样的问题并在终端上运行此命令

          xcode-select --install 
          

          为我工作。安装xQuartz后运行此命令。

          【讨论】:

          • 也为我工作。 macOS Sierra 10.12.6 (16G29),使用pyenv install 2.7.13 安装的 Python 2.7.13。