我正在使用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属性。
我想知道可能是什么问题?
谢谢大家的潜在帮助
答案 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>