在Arm汇编中使用C中声明的全局变量

de1*_*7ed 5 c assembly arm

我有一个声明全局变量的C文件。该文件将与一些ARM汇编文件一起编译。

int foo;

void call_asm(void);

int main(void) {
    call_asm();
    return foo;
}
Run Code Online (Sandbox Code Playgroud)
call_asm:
    ...
Run Code Online (Sandbox Code Playgroud)

我尝试使用来自arm信息中心链接,但是编译器(arm-linux-gnueabi-gcc)告诉我“ import”是未定义的指令。

我可以简单地做些什么:

LDR    r0, =GLOBAL_VAR
Run Code Online (Sandbox Code Playgroud)

如何在汇编中使用C文件中定义的全局变量?

小智 2

我认为您需要将指令从 ARM 汇编器转换为 GNU 汇编器。如果我理解正确,您可以使用.global指令而不是 来访问任何全局符号.import。从用作页面:

.全局符号

.global 使符号对 ld 可见。如果在部分程序中定义符号,则其值可用于与其链接的其他部分程序。否则,符号从链接到同一程序的另一个文件中的同名符号获取其属性。