我想用python编写一个好的调用图程序,因此我使用pycparser。
为了正确地创建抽象语法树,Pycparser需要对c文件进行预处理。
我的第一种方法是只对文件使用gcc的-E
选项,然后将其传递给pycparser。
但是对于不同的项目,我会得到“No such file or directory
”错误,因为gcc找不到特定的头。如果我尝试用gcc -E `find | grep "\.c"\`
预处理linux内核,它会丢失一些头文件,比如那些带有linux/前缀的头文件,因为没有这样的文件夹。在我看来,gcc需要一些额外的标志来传递头文件的位置并正确地进行预处理。有没有一种通用的方法来预处理任意C项目?你知道吗
此外,我猜如果我得到它的预处理正确有多个相同的功能副本在不同的文件。有没有办法确定函数的原始文件?你知道吗
您需要了解GCC如何查找头文件,至少包括编译器命令行开关和搜索路径的环境变量。你知道吗
我怀疑各种项目集配置变量的构建脚本会影响GCC如何查找任何特定编译的头文件。许多这样的脚本甚至在命令行上进行宏替换,这意味着您必须知道脚本在做什么。你知道吗
如果将C源文件与设置其生成上下文的make脚本隔离,GCC将找不到正确的头。这就是你的问题。你知道吗
您可能需要运行构建脚本,并拦截对GCC的调用以捕获必要的上下文。你知道吗
相关问题 更多 >
编程相关推荐