自定义Clang将C 代码转换为C

Customize Clang to convert C++ code to C

本文关键字:转换 代码 自定义 Clang      更新时间:2023-10-16

这是我的场景:I,m在嵌入式Linux系统上工作,并在C 上写了共享库。它运行良好,除了需要LIBSTDC ,这意味着占用额外的1M内存。我想将共享库转换为C,以便保存1M内存。

我知道如何手工将C 代码转换为C,但这确实很无聊。因此,我搜索了解决方案并得到一个类似的问题:使用Clang将C 转换为C代码。但是,生成的代码不可读取。我想获得可维护的C源代码来过时原始的C 代码。

我是Clang的新手。我了解到Clang可以用来构建处理代码的工具。我的问题是:

  1. 是否有可能使用Clang实现我的目标?
  2. 如果可能的话,我该怎么做?更具体地说,我该如何使用clang删除由宏包裹的代码块作为第一步?

练习转换(半自动上)真实的C 代码为可维护的C代码是不是现实的

我想获取可维护的C源代码来过时原始的C 代码。

您当然不会获得可维护和可读和便携式C代码(例如,一旦在C 中使用了标准容器;它们的模板扩展是不可读的,并且可能无法移植到某些东西具有不同的单词大小,对齐,末端性...)。您可以将LLVM IR转换为c。

它运行良好,除了需要libstdc ,这意味着占用额外的1M内存

也许您可以尝试链接(所有内容)静态;也许在您的特定应用程序中仅使用libstdc++的一部分。

顺便说一句,您可以从GCC中获得gimple,然后将该t gremple转换为 C代码(也许是通过使用插件或GCC熔体扩展程序自定义GCC)。

您也可以尝试通过链接时间优化来编译和链接,例如使用-flto -Os(最近的GCC或Clang)。

不要忘记开发工作也有一定的代价。是否值得花一整年的工作(或更长时间)让少数开发人员赢得几百千摩变的团队?在大多数情况下,将硬件升级到具有更多内存的东西的成本要小得多。ymmv