3

我正在尝试在函数传递中创建一个全局变量。代码是

gVar= new GlobalVariable(
    /*Type=*/Int32Type,
    /*isConstant=*/false,
    /*Linkage=*/GlobalValue::CommonLinkage,
    /*Initializer=*/0, // has initializer, specified below
    /*Name=*/"gVar",
    /*ThreadLocalMode*/GlobalVariable::InitialExecTLSModel);

但是,我不断收到以下编译器错误:

错误:没有匹配函数调用 'llvm::GlobalVariable::GlobalVariable(const llvm::Type*&, bool, llvm::GlobalValue::LinkageTypes, int, const char [4], llvm::GlobalVariable::ThreadLocalMode )'</p>

你能告诉我在llvm中声明全局变量的正确方法吗?非常感谢!

另外,我参考了头文件:

http://llvm.org/docs/doxygen/html/GlobalVariable_8h_source.html

和这篇文章

如何在 LLVM 中声明全局变量?

4

1 回答 1

6

您需要将 Module 传递给构造函数。LLVM 代码库中有很多用于创建全局变量的示例。例如,在examples/ExceptionDemo/ExceptionDemo.cpp

new llvm::GlobalVariable(module,
                         stringConstant->getType(),
                         true,
                         llvm::GlobalValue::LinkerPrivateLinkage,
                         stringConstant,
                         "");

顺便说一句 - 重要说明:您不应该创建新的全局变量或做任何其他修改函数传递中的模块的事情。如果你必须这样做,你需要一个模块通行证。

于 2013-11-08T19:21:56.303 回答