如何在LLVM中定义全局变量并在C中使用它?

时间:2014-10-08 10:22:31

标签: c global-variables llvm

到目前为止,我发现只有这样:通过函数获取指向全局变量的指针。

LLVM:

@a = global i8 0
define i8* @ggvp_a () {
    ret i8* @a
}

C:

char* ggvp_a (void);

用法:

char* gvp_a = ggvp_a ();
*gvp_a = 8;
return *gvp_a;

(“ggvp” - “获取全局变量指针”)

有更方便的方法吗?

2 个答案:

答案 0 :(得分:2)

它是一个与其他声明一样的外部声明 - 只需添加

即可
extern signed char a;

到您的.c文件。

答案 1 :(得分:0)

在您引用全局变量的文件中,您必须告诉LLVM该变量存在:

foo.l

@foo = global i32 0, align 4

bar.l

@foo = external global i32

define i32 @bar() #0 {
  %1 = load i32* @foo, align 4
  ret i32 %1
}

当您尝试从C源文件中使用foo时,同样适用于此情况,在这种情况下您必须在某处放置外部声明:

baz.c

extern int foo;