如何在gcc中间表示中保存树?可能吗?

如何在gcc中间表示中保存树?可能吗?,gcc,tree,lto,gimple,gcc-plugins,Gcc,Tree,Lto,Gimple,Gcc Plugins,我想将一棵树(特别是树的类型)以二进制形式保存在一个文件中,并且我需要将这棵树加载到其他编译单元中。例如: 我有一个带2个函数的main.c: myTypeStruct getWhatever(){ myTypeStruct my; ... doSomething ... return my; } int main(){ myTypeStruct my = getWhatever(); ... doSomething else with my... } 我想

我想将一棵树(特别是树的类型)以二进制形式保存在一个文件中,并且我需要将这棵树加载到其他编译单元中。例如:

我有一个带2个函数的main.c:

myTypeStruct getWhatever(){
   myTypeStruct my;
   ... doSomething ...
   return my;
}

int main(){
    myTypeStruct my = getWhatever();
   ... doSomething else with my... 
}
我想保存结构的类型(myTypeStruct),并将其加载到涉及test.c的另一个编译单元中,如下所示:

int main(){
   ... doSomeTest ...
}
使用gcc插件,我想加载该类型并构建一个该类型的变量来转换test.c,如下所示:

int main(){
   myTypeStruct my;
   ... doSomething with my...
   ... doSomeTest ...
}
我知道树是指向树节点的指针,树节点是结构的联合。问题是一棵树和它有关系,并且有一系列不可理解的结构。在构建特定类型的变量时,我需要知道哪些数据需要树

PD:关于LTO如何做这样的事情,没有足够的文档。
PD2:对不起,我的英语不好

如果我理解正确,您要做的是序列化类型,然后在后续编译中,使用您的插件读入该类型,以执行其他转换

对此没有内置的支持

也许可以使用内置的预编译头支持来完成。核心思想是在调用插件的编译中加载PCH。因此,您可以安排制作一个PCH来保存您想要重读的类型,然后您的插件就可以简单地按名称查找这些类型

使用LTO很有诱惑力,因为它拥有所有的流式支持,但我认为目前LTO代码的用途不是很好


另一种方法是编写自己的序列化程序。我做这件事碰巧是为了你。也许这样的东西对你有用。

wao,非常感谢,也许它有用,我还没有为你的答案投票的名声,对不起,它有用,谢谢你,伙计,甚至我现在都不知道如何在gcc插件中使用c++11编程,谢谢兄弟