如何使用LLVM中的非常量值生成初始化全局变量的代码?

问题描述:

在LLVM(特别是llvmlite)中,如何声明一个全局变量并用任意(运行时)表达式的结果初始化其内容?如何使用LLVM中的非常量值生成初始化全局变量的代码?

我看到我可以创建一个GlobalVariable对象,但它看起来像它的initializer参数期望Constant。如果我必须在启动/加载时运行任意代码以确定其值,该怎么办?代码去哪了?我要添加说明书给谁Builder?我是否声明了一个专门命名的函数和/或向其添加魔术属性,以便在运行时将模块加载到内存时自动执行?

完全取决于您的设置。在使用Visual Studio的C或C++中,C和C++初始化函数最终放入.CRT部分的一个子部分,并由标准运行时库执行。

如果您在没有CRT的情况下编译并且具有这些初始化函数,那么它们将不会触发,因为运行时会处理该问题。

纠错编辑:看起来@llvm.global_ctors存在。

我不确定在没有帮助执行初始化程序的运行时库的环境中,它们是否会正确启动,但是在那里有。