首页 > 解决方案 > 是否有任何用于绘制图片和制作 .jpg 文件的 C 库?

问题描述

我认为这个问题可能看起来非常愚蠢和不必要,但我真的不知道如何解决这个问题。

由于使用了一些用 C 编写的测试代码,我需要制作一个调用图。

我制作了 lex 文件和 yacc 文件来解析语法。

现在我可以制作一个可执行文件来解析用 .l 和 .y 文件编写的 C 语言文件。

但是现在我必须制作一个jpg文件和文本文件,因为可执行文件带有输入文件

jpg文件和文本文件需要在输入中显示函数的调用关系(Call graph)

所以假设有文件

lex.l yacc.y test.c

我需要制作一个可执行文件。

lex lex.l命令制作lex.yy.c

yacc -d yacc.y命令 makey.tab.cy.tab.h(lex 文件的标头)

现在cc y.tab.c lex.yy.ccammand 将生成一个可执行文件a.out

所以我必须制作一个jpg文件(.jpg)和文本文件(.txt)作为a.out < test.c命令的结果

我知道如何使用 fprintf() 函数制作文本文件。

但是jpg文件是我真的想不通的东西。

我无法使用其他一些工具

我只能在 lex 文件和 yacc 文件中键入一些 C 代码

所以我想我可能会使用一些 C 库来做到这一点

有什么办法可以做到这一点吗?

谢谢

标签: clinuxyacclexcall-graph

解决方案


由于使用了一些用 C 编写的测试代码,我需要制作一个调用图。

您可以分叉一些其他 进行绘图的进程并使用的进程间通信工具(这可能是最简单的方法,因为它符合Unix 哲学)。考虑运行一些GraphVizGnuPlot进程。你需要掌握 Linux 系统编程的技能(明智地使用syscalls(2)中列出的几个系统调用),所以你应该阅读ALP或更新的东西。

所以我必须制作一个jpg文件(.jpg)和文本文件(.txt)作为a.out < test.c命令的结果

不要为你的程序命名a.out,在 2019 年它是荒谬的。了解如何调用 GCC。并学习使用程序参数(您可能希望使用解析程序参数工具)。您将调用您的程序,myprogram test.c但请注意您的 shell(您将用来运行程序的那个)将执行globbing

您还可以使用一些GUI 工具包(如GTKlibSDL )使您的程序成为一些GUI应用程序(以工具包提供的一些事件循环为中心) 。如果你只是想输出一些图形,你也可以考虑libcairo

如果你有网络编程技能,你可以考虑使用网络技术(例如SVG + HTML5 + Canvas);如果您想让您的程序成为一些专门的 Web 服务器(例如,您的用户会浏览一些http://localhost:12345 URL),请考虑使用HTTP服务器库,例如libonion

如果您接受生成具有绘图的其他类型的文件,请考虑发出一些 SVG 或 PDF 文件。你也会找到相关的库。顺便说一句,SVG 是一种可以直接发出的文本格式。

最后,您可以找到许多处理 JPEG 文件的库,例如libjpeg

PS。你真的应该在网上找到一些与你的目标精神相似的小型现有 自由软件项目(例如在githubgitlabsourceforge等...) ,并研究它的源代码以获得灵感。通过这样做,您将学到很多实用的东西,并且您将节省数小时的工作时间(因为您显然缺乏实用技能)。

顺便说一句,如果您的目标是找到一些真实 C 程序的调用图,请考虑制作一些GCC 插件。几周前我做了这个(大约 800 行 C++ 代码),用于一些与我的Bismon研究项目相关的无趣演示。如果你必须解析 C 代码,你需要解析它的预处理形式。所以运行一些cpp预处理器来得到它。


推荐阅读