在Mac OS X 10.8(Mountain Lion)上构建Graphviz时找不到Xlib.h

45

使用Homebrew安装Graphviz时,脚本会在“Making install in 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,因为在Mountain Lion中已经不支持X11了,但我不确定它是否正确安装。Xlib.h的位置是:

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

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

/usr/X11
/usr/X11R6

这看起来对你来说是正确的设置吗?我昨天之前从未涉及过X11或XQuartz。

祝福。

8个回答

121
在安装完 XQuartz 后,你可以通过输入以下命令来将符号链接添加到你的 X11 安装文件夹中:
ln -s /opt/X11/include/X11 /usr/local/include/X11

在终端中运行。这样做可以解决问题,而无需更改任何 Ruby 脚本。


2
然后显示ld: library not found for -lX11,如何解决? - Yu Jiaao

31

您需要告诉 tkstubs 构建过程(以及可能还有包中的其他部分)去查找 /opt/X11/include 目录下的头文件;这个目录不在标准头文件路径中。

通常可以通过将 -I/opt/X11/include 作为额外的编译器选项传递来实现,但如何实现取决于构建系统。

对于相当现代的 configure 脚本,最好的方法是将其传递给环境变量 CPPFLAGS;如果软件包使用另一个构建系统或出于其他原因无法使用这种方法,则需要查看构建目录中的 Makefile


5
CPPFLAGS是预处理器标志--C++编译器应该遵守它们。只有C的标志放在CFLAGS中,只有C++的标志放在CXXFLAGS中。 - Simon Richter
啊,当然... 对我来说早上还太早了,我猜想我的思维还没清醒 :) - Some programmer dude
1
太好了。我将这段代码添加到了Ruby脚本中:ENV.append 'CFLAGS', '-I/opt/X11/include',然后它成功安装了。谢谢。 - AntBrown

29
您可以在编译/链接(或安装)命令之前输入您的shell:
export CPPFLAGS=-I/opt/X11/include

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


3
我也是。曾在 Mavericks 上工作过。对我而言,路径如下: 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; - naoko

7

我有相同的问题,运行以下命令在终端上解决:

xcode-select --install 

对我来说有效。在安装 xQuartz 后运行此命令即可。


对我也起作用了。macOS Sierra 10.12.6 (16G29),使用 pyenv install 2.7.13 安装的 Python 2.7.13。 - pawelswiecki

6
如果您需要在CMake构建中使用此功能:
if(APPLE)
   include_directories(AFTER "/opt/X11/include")
endif()

这对我来说效果很好。


2

在尝试在OS X上从源代码编译ffmpeg时,我发现了这个帖子。我需要--enable-x11grab,但homebrew版本不支持此选项。

我已经安装了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-不要相信终端输出!


1
非常感谢您的这篇文章。我在使用OSX时遇到了问题,根本原因是它正在运行clang而不是gcc。如果没有这个评论,我永远不会想去查看日志文件。谢谢! :) - Tennessee Leeuwenburg

2
我通过将x11头文件目录复制到/opt/local/include目录中,成功安装了它。这可能不是最好的解决方法,但很快很容易操作。

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

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