2

我一直在尝试使用以下命令使 clang 2.9 输出带有 graphviz 的 AST:

./clang -cc1 -ast-view smd.c 

但是它在控制台上输出代码并抱怨:

Stmt::viewAST 仅在带有 Graphviz 或 gv 的系统上的调试版本中可用!

在 llvm文档中提到/Applications/Graphviz.app/Contents/MacOS/应该添加到路径中。我这样做了,export PATH=$PATH:/Applications/Graphviz.app/Contents/MacOS/但仍然无法正常工作。

同样在同一文档中提到:

让它工作需要少量的配置。在带有 X11 的 Unix 系统上,安装 graphviz 工具包,并确保 'dot' 和 'gv' 在你的路径中。如果您在 Mac OS/X 上运行,请下载并安装 Mac OS/X Graphviz 程序,并将 /Applications/Graphviz.app/Contents/MacOS/(或安装它的任何位置)添加到您的路径。设置好系统和路径后,重新运行 LLVM 配置脚本并重建 LLVM 以启用此功能。

我不知道这个配置在哪里并重建 LLVM(我所做的只是下载llvm+clang 2.9包并直接从文件夹中运行命令。

关于我的graphviz版本:

$ dot -v
dot - graphviz version 2.28.0 (20111028.1807)

但是该gv命令不可用,我似乎无法在谷歌上找到它应该位于或获取的位置。

对此有任何线索吗?问题本身是如何将 clang 2.9 输出到 graphviz。我只是相信这与我的机器上找不到的这个 gv 有关,但我可能会被误导。

谢谢你。

4

2 回答 2

3

由于我必须通过一些奇怪的细节才能使其正常工作,而且我认为这不是 Mac OS Lion 用户的直接方法,所以我发现如果有人像我一样因为看似简单的事情而陷入困境一条线任务。

  1. 首先,在任何事情之前,您可能想检查您是否有 graphviz 和 gv,正如我在最初的问题中所提到的,如果您遇到与我相同的情况,您会听到关于 graphviz 或 gv 的叮当声。虽然仅使用 google 就可以相对容易地找到graphviz,但 gv 在我看来并不像,因为它在他们的官方网站上缺少它的名字,即GNU gv

  2. 您应该可以轻松安装 graphviz,但 gv 可能不会。它抱怨一个名为Xaw3d. 他们的网站包含一个不是那么最新的版本(2003),但这就是我们要做的。如果您像我一样不幸,您会发现下载已损坏。幸运的是,一位朋友向我指出了麻省理工学院的这个网站,该网站有人不得不处理这个问题,因此为我节省了很多时间。在我回答这个问题时,它是最近的(2012 年 5 月),所以它也应该对你有用。我在这里发布我实际使用的内容,以防该页面出现故障:

  3. 获取.ziptar版本的gv.

  4. pkg-config utility通过运行避免:

$ ./configure X11_CFLAGS='-I/usr/X11/include/X11' X11_LIBS='-L/usr/X11/lib -lX11 -lXext -lXmu -lXt'

ibXaw3d-1.6控制台上的目录中。

其次是:

制作

须藤使安装

打扫干净

完成后返回并安装 gv,如果它不起作用,请更改他们的代码,这对我来说也是错误的(在一行上缺少一些参数,这使得安装无法完成),正如 MIT 页面提到的:

改变Scrollbar.c

(*swclass->threeD_class.shadowdraw) (w, event, region, FALSE);

(*swclass->threeD_class.shadowdraw) (w, event, region, sbw->threeD.relief, FALSE);

在 MAC 上,如果未运行以下命令,它也会抱怨僵尸进程,以防万一,作者还建议以这种方式完成配置:

./configure --x-includes=/usr/X11/include/X11 --x-libraries=/usr/X11/lib --enable-SIGCHLD-fallback

最后如果你运行 gv 应该是可用的$gb whatever.ps。如果您想知道,这是它的用途之一,如果不是全部,请打开 .ps(我没有费心去看它,因为它不是最初的目的)。


现在,如果您仍然像我一样不走运,那么运行相同的东西将行不通。

感谢 Joey(下面评论中的人)和LLVM 邮件列表的人,我发现我应该在调试模式下运行构建。

现在看来,如果您像我最初为 MAC OS 下载的二进制文件一样,出于优化原因,它会自动进入调试模式(快 10 倍左右,我在控制台上的输出之一)。

如果您转到此页面并按照 1. 到 5. 您将按照该页面上的说明获得已处于调试模式的最新版本。

确保您打开LLVM/Debug+Accerts/bin/clang并从该叮当声中执行。结果应该在 gv 上用树打开一个 GUI。


正如您可能注意到的那样,我必须继续使用最新版本。有一种方法可以根据llvm getting started在 llvm compile 的 debug 模式下编译。基本上这一段说明了一切:

这些构建使用 --enable-optimized 选项来配置或通过在 gmake 命令行上指定 ENABLE_OPTIMIZED=1 来启用。对于这些构建,构建系统将编译启用 GCC 优化的工具和库,并从它生成的库和可执行文件中去除调试信息。请注意,使用 LLVM 发行版时,Release Builds 是默认的。

虽然我收到了一些似乎证实我在调试模式下成功编译 2.9 的消息,例如:

llvm[0]: *完成调试构建

llvm[0]: *注意:调试构建可能比

llvm[0]: *优化构建。使用 make ENABLE_OPTIMIZED=1 到

llvm[0]: *进行优化构建。或者,您可以

llvm[0]: *使用 --enable-optimized 进行配置。

做同样的事情(在这种情况下,文件夹只被调用Debug而不是Debug+Asserts),但是对于 2.9 进行相同的过程不起作用。如果有人知道为什么,请让我知道,因为我仍然对 2.9 感兴趣,但总而言之,最后在视觉上看到它是有效的。我仍然不知道为什么它只在 gv 上输出而不在 graphviz 上输出

于 2012-06-10T00:34:03.917 回答
0

虽然这个答案是在 6 年后才出现的,但它可能会增加一种更简单的方法来解决相同的问题。我今天面临同样的问题,我使用自制软件解决了它。

  1. berw cask install Graphviz
  2. brew cask install xquartz # gv 的依赖
  3. 酿造桶安装gv

此外,请确保您使用的 clang 是调试版本,正如 OP 所提到的。

于 2018-05-19T16:54:07.960 回答