到目前为止,我只找到了这样一种方法:通过函数获取指向全局变量的指针。
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"--"获取全局变量指针")
有更方便的方法吗?
这是一个像其他声明一样的外部声明-只需添加
extern signed char a;
到您的.c
文件。
在引用全局变量的文件中,您必须告诉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;