是否有任何用于绘制图片和制作.jpg 文件的C 库?

Is there any C library for drawing pictures and making .jpg files?

我觉得这个问题可能看起来很愚蠢而且没有必要,但我真的想不出如何解决这个问题。

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

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

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

但现在我不得不制作一个jpg文件和一个文本文件作为输入文件的可执行文件

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

所以假设有文件

lex.l yacc.y test.c

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

lex lex.l命令使lex.yy.c

yacc -d yacc.y 命令生成 y.tab.cy.tab.h(header 用于 lex 文件)

现在cc y.tab.c lex.yy.c cammand 将创建一个可执行文件a.out

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

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

但是jpg文件是我实在想不通的东西

我不能使用其他一些工具

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

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

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

谢谢

I need to make a call graph as a result of using some test codes written in C.

你可以 fork some other process doing the drawing and use inter-process communication facilities with it (and this is probably the simplest approach, since it conforms to the Unix philosophy). Consider running some GraphViz or maybe GnuPlot process. You need skills on Linux system programming (to use wisely several system calls, which are listed in syscalls(2)), so you should read ALP 或更新的东西。

so I have to make a jpg file(.jpg) and text file(.txt) as a result of a.out < test.c command

不要给你的程序起名字a.out,在2019年是荒谬的。了解如何 invoke GCC. And learn to use the program arguments (you may want to use parsing program arguments facilities). You'll invoke your program as myprogram test.c but be aware that your shell (the one you'll use to run your program) will do globbing.

你也可以让你的程序变得更 GUI application (centered on some event loop provided by the toolkit), using some GUI toolkit like GTK or libSDL. If you just want to output some graphics, you might consider also libcairo.

如果你有 web programming skills, you could consider using web technologies (such as SVG + HTML5 + Canvas); if you want to make your program some specialized web server (e.g. your user would browse some http://localhost:12345 URL), consider using an HTTP server library such as libonion.

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

最后,你可以找到很多处理JPEG文件的库,比如libjpeg

PS。你真的应该 在网上找到 一些小的 existing free software project (e.g. on github, gitlab, sourceforge, 等等...) similar 实现您的目标并研究其源代码以获得灵感。通过这样做,您将学到很多实用的东西,并且可以节省工作时间(因为您显然缺乏实用技能)。

顺便说一句,如果您的目标是找到某些 real-life C 程序的调用图,请考虑做一些 GCC plugin. I did that a few weeks ago (in about 800 lines of C++ code), for some uninteresting demo in relation with my Bismon 研究项目。如果您确实必须解析 C 代码,则需要解析它的预处理形式。所以 运行 一些 cpp 预处理器来得到它。