创建在一个头文件中具有extern的GlobalVariable

时间:2019-02-22 02:56:51

标签: llvm

美好的一天。我在创建GlobalVariable时遇到问题。我已经在头文件中有了该全局变量的外部元素,可以通过以下方式使用它

extern const void* DATA_TABLE[];

使用LLVM PASS,我试图使用相同的名称和初始化程序创建此数组。所以,我有以下内容:

GlobalVariable *gvar_data = new GlobalVariable(
    M, blockItems->getType(), true, GlobalValue::CommonLinkage,
    blockItems, "DATA_TABLE");
gvar_data->setAlignment(16);
gvar_data->setSection("data_section");
gvar_data->addAttribute(llvm::Attribute::OptimizeNone);

我不确定我是否使用正确的链接。 通行证未能完成。这是运行时错误。你猜我在做什么错吗?

'common' global must have a zero initializer!
[10 x i8*]* @DATA_TABLE.1
LLVM ERROR: Broken module found, compilation aborted:::::::::!

1 个答案:

答案 0 :(得分:0)

如果您不调用setInitializer(),则您输入的GlobalVariable是extern。有一个函数可以为您提供的类型提供全零初始化程序,我不记得它的名字了,或者您可以自己使用ConstantStruct,ConstantInt和他们的兄弟姐妹。