c - 是否有任何用于绘制图片和制作 .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.c
和y.tab.h
(lex 文件的标头)
现在cc y.tab.c lex.yy.c
cammand 将生成一个可执行文件a.out
所以我必须制作一个jpg文件(.jpg)和文本文件(.txt)作为a.out < test.c
命令的结果
我知道如何使用 fprintf() 函数制作文本文件。
但是jpg文件是我真的想不通的东西。
我无法使用其他一些工具
我只能在 lex 文件和 yacc 文件中键入一些 C 代码
所以我想我可能会使用一些 C 库来做到这一点
有什么办法可以做到这一点吗?
谢谢
解决方案
由于使用了一些用 C 编写的测试代码,我需要制作一个调用图。
您可以分叉一些其他 进行绘图的进程并使用它的进程间通信工具(这可能是最简单的方法,因为它符合Unix 哲学)。考虑运行一些GraphViz或GnuPlot进程。你需要掌握 Linux 系统编程的技能(明智地使用syscalls(2)中列出的几个系统调用),所以你应该阅读ALP或更新的东西。
所以我必须制作一个jpg文件(.jpg)和文本文件(.txt)作为
a.out < test.c
命令的结果
不要为你的程序命名a.out
,在 2019 年它是荒谬的。了解如何调用 GCC。并学习使用程序参数(您可能希望使用解析程序参数工具)。您将调用您的程序,myprogram test.c
但请注意您的 shell(您将用来运行程序的那个)将执行globbing。
您还可以使用一些GUI 工具包(如GTK或libSDL )使您的程序成为一些GUI应用程序(以工具包提供的一些事件循环为中心) 。如果你只是想输出一些图形,你也可以考虑libcairo。
如果你有网络编程技能,你可以考虑使用网络技术(例如SVG + HTML5 + Canvas);如果您想让您的程序成为一些专门的 Web 服务器(例如,您的用户会浏览一些http://localhost:12345 URL),请考虑使用HTTP服务器库,例如libonion。
如果您接受生成具有绘图的其他类型的文件,请考虑发出一些 SVG 或 PDF 文件。你也会找到相关的库。顺便说一句,SVG 是一种可以直接发出的文本格式。
最后,您可以找到许多处理 JPEG 文件的库,例如libjpeg。
PS。你真的应该在网上找到一些与你的目标精神相似的小型现有 自由软件项目(例如在github、gitlab、sourceforge等...) ,并研究它的源代码以获得灵感。通过这样做,您将学到很多实用的东西,并且您将节省数小时的工作时间(因为您显然缺乏实用技能)。
顺便说一句,如果您的目标是找到一些真实 C 程序的调用图,请考虑制作一些GCC 插件。几周前我做了这个(大约 800 行 C++ 代码),用于一些与我的Bismon研究项目相关的无趣演示。如果你必须解析 C 代码,你需要解析它的预处理形式。所以运行一些cpp
预处理器来得到它。
推荐阅读
- javascript - 使用 Json Web 令牌保护前端页面的最佳方法?
- python - 在 Solaris 上使用 pip 安装 cx_Oracle 的编译器问题
- google-cloud-firestore - 如何在 Cloud Firestore 中查询与所有值匹配但以任何顺序匹配的数组?
- apache - 在 Python 3.7 中使用 CGI 渲染内联 PDF 时出错
- c - 为什么二进制文件的内容没有在c中打印?
- javascript - 在 Node.js 调试中将 console.log 的输出显示为 HTML
- python - 如何使用 python 使用 K-Means 匹配具有真实标签的标签集群
- python-3.x - 我们如何在python的句子中间放置一个变量的值?
- excel - Solver.xlam 添加在 mac 2011 excel 版本 14.0.0 中丢失
- python - 不确定 NumPy 数据类型的整数代表什么