LLVM:将全局变量链接类型设为linkonce

时间:2015-10-29 20:38:36

标签: c++ clang llvm

我正在使用llvm编译器来生成C代码。

我在编译器中有以下代码,用于在我的C代码中声明一个全局变量:

GlobalVariable* gvar_int64_test = new GlobalVariable(M, 
    IntegerType::get(M.getContext(), 64),
    false,
    GlobalValue::LinkOnceAnyLinkage,
    0,
    "test");

编译器并行运行以编译几个C文件。但我希望所有编译文件中名称'test'的全局变量共享相同的值或地址。所以我认为将链接类型设置为'LinkOnceAnyLinkage'可能会有效。

然而,在运行传球时。它说:

invalid linkage type for global declaration
i64* @test

将其更改为ExternalLinkage不会引发此问题,但我确实需要它来获取linkonce属性。

我想知道可能是什么问题?

谢谢大家的潜在帮助

1 个答案:

答案 0 :(得分:-1)

你把它放在哪里?在.h文件中?我真的不明白你的联系是什么意思[或者你想要/需要它的原因]

假设这是一个文件,例如myheader.h,你需要的是:

#ifdef DEFINE_GLOBAL
GlobalVariable* gvar_int64_test = what you specified ...
#else
extern GlobalVariable* gvar_int64_test;
#endif

在.h的#include之前,在一个和一个.cpp文件中执行:

#define DEFINE_GLOBAL
#include <myheader.h>