1

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

我有一个带有 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:对不起我的英语

4

1 回答 1

3

如果我理解正确,您要做的是序列化类型,然后在随后的编译中,使用您的插件读取它,以进行其他一些转换。

对此没有内置支持。

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

使用 LTO 很诱人,因为它支持所有流式传输,但我认为目前的 LTO 代码不是很可重用。

另一种方法是编写自己的序列化程序。我碰巧为我写的一个实验性 PCH 插件做了这个。也许这样的事情对你有用。

于 2015-06-15T16:06:51.610 回答