美好的一天。我在创建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:::::::::!
答案 0 :(得分:0)
如果您不调用setInitializer(),则您输入的GlobalVariable是extern。有一个函数可以为您提供的类型提供全零初始化程序,我不记得它的名字了,或者您可以自己使用ConstantStruct,ConstantInt和他们的兄弟姐妹。