0

我有一个可执行文件,其中包含多个目录中的许多 .c 源文件。目前我需要对整个源代码进行静态分析,而不是单独对每个文件进行分析。

我刚刚发现 gcc ʟᴛᴏ(链接时间优化)通过压缩镜像预处理源的 gimple 起作用。
此外,当编译器在 ʟᴛᴏ 链接阶段崩溃时,它会要求发送预处理源以获取错误报告。

通过合并源文件,我的意思是将用于创建可执行文件的所有文件合并到一个文件中。编译和链接该单个文件将创建库,从而手动执行 ʟᴛᴏ 所做的事情。(但这不是这里的目的。静态分析器不支持 ɪᴘᴏ/ʟᴛᴏ 之类的东西)
手动执行此操作肯定需要数小时......</p>

那么,有没有办法自动合并C源文件?或者至少得到 ʟᴛᴏ 预处理源?save-temps在与 ʟᴛᴏ 链接期间,该选项似乎没有什么有趣的作用)

4

2 回答 2

2

CIL(C 中间语言)有一个“合并”功能,我已经成功地将它用于一些简单的合并操作。

我用它来合并中等复杂的程序——不同文件夹中的大约一百个文件。当然,如果您的代码库包含任何 C++,则 CIL 合并将无法合并它。

于 2016-06-15T17:35:17.430 回答
0

不,因为例如两个文件可能有冲突的static声明。还有其他方法可以将源代码移动到单个文件中可能会使其停止工作,并且诊断每一个可能的方法都需要解决停止问题。__FILE__(如果两段代码在同一个文件中,任意程序是否曾经以这样的方式使用结果失败?)但是,文件范围声明最有可能发生在现实世界中。

也就是说,您可以尝试仅连接文件并查看收到的错误消息。如果您#include两次使用它们,大多数标题应该会继续工作。冲突的标识符名称可以通过在原始文件中的搜索和替换来修复。

于 2015-10-08T22:04:22.170 回答