我正在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属性。

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

谢谢大家的潜在帮助

最佳答案

你把它放在哪里?在.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>

10-01 15:06