LLVM IR 无法访问全局变量
LLVM IR can't access global variable
我正在尝试用 LLVM 编译一个程序,我生成了这段代码
@c = common global i32
@d = common global i32
declare i32 @writeln(i32)
define i32 @a() {
entry:
store i32 2, i32* @c, align 4
ret i32 2
}
define i32 @main() {
entry:
%calltmp = call i32 @a()
ret i32 0
}
我在尝试将其编译为目标文件时遇到此错误
Undefined symbols for architecture x86_64:
"_c", referenced from:
_a in a.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
有谁知道我做错了什么吗?
引自 LLVM-IR 语言参考:
Global variable definitions must be initialized.
所有全局变量声明都定义了一个指向内存区域的指针,LLVM 中的所有内存对象都是通过指针访问的。
如果您要定义一个指向外部值的指针,这会很轻松,原因很明显:
@G = external global i32
我正在尝试用 LLVM 编译一个程序,我生成了这段代码
@c = common global i32
@d = common global i32
declare i32 @writeln(i32)
define i32 @a() {
entry:
store i32 2, i32* @c, align 4
ret i32 2
}
define i32 @main() {
entry:
%calltmp = call i32 @a()
ret i32 0
}
我在尝试将其编译为目标文件时遇到此错误
Undefined symbols for architecture x86_64:
"_c", referenced from:
_a in a.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
有谁知道我做错了什么吗?
引自 LLVM-IR 语言参考:
Global variable definitions must be initialized.
所有全局变量声明都定义了一个指向内存区域的指针,LLVM 中的所有内存对象都是通过指针访问的。
如果您要定义一个指向外部值的指针,这会很轻松,原因很明显:
@G = external global i32