我想以二进制形式保存文件中的树(特别是树的类型),我需要在其他编译单元中加载此树。例如:
我有一个带有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 ...
}
我知道树是指向 tree_node 的指针,而tree_node是结构的联合。问题是树与它有关系,并且有一系列难以理解的结构。在构建特定类型的变量时,我需要知道哪些数据需要树。
PD:关于LTO如何做这样的事情的文件不足。 PD2:对不起我的英文
答案 0 :(得分:2)
如果我理解正确,您要做的是序列化类型,然后在后续编译中使用您的插件读取它,以进行其他转换。
没有内置支持。
也许可以使用内置的预编译头支持来完成。核心思想是在调用插件的编译中加载PCH。因此,您可以安排让PCH保留您想要重新阅读的类型,然后您的插件可以只按名称查找类型。
使用LTO很有诱惑力,因为它具有所有的流媒体支持,但我认为目前的LTO代码不是很容易再利用。
另一种方法是编写自己的序列化程序。我碰巧为an experimental PCH plugin I wrote做了这件事。也许这样的事情对你有用。