ARM汇编器示例文件:
.global _start
_start:
mov r0, #0x1
mov r7, #1
swi 0
文件可以使用以下任一方法组装:
as -o example.o example.s
gcc -c -o example.o example.s
和对象文件可以与ld链接
ld -o example example.o
但
gcc -o example example.o
抱怨有以下几点
example.o: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/crt1.o:/build/glibc-6f8a9a/glibc-2.19/csu/../ports/sysdeps/arm/start.S:79: first defined here
/usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/crt1.o: In function `_start':
/build/glibc-6f8a9a/glibc-2.19/csu/../ports/sysdeps/arm/start.S:119: undefined reference to `main'
背景资料:我正在尝试从《ARM汇编语言,威廉·霍尔》中学习ARM汇编。我有使用ARMv4T的第一版。我在树莓派1 (ARMv6)上运行代码。所以,我拼凑了来自各地的信息,试图让示例运行。这一点难倒我了。任何一般的指示都非常感谢。谢谢
发布于 2016-05-31 03:17:31
麦克尔·佩奇的评论是正确的。使用名为main的全局变量会导致C运行时用于处理程序的启动和结束。
我们作弊只是为了让事情变得简单一点。我们在汇编程序中编写了一个C主函数,它只返回2;。这样我们的程序就更容易了,因为C运行时为我们处理了程序的初始化和终止。..。这是必需的,因为C运行时将调用main。如果它不是全局的,它将不能被C运行时调用,并且链接阶段将失败。
http://thinkingeek.com/2013/01/09/arm-assembler-raspberry-pi-chapter-1/
https://stackoverflow.com/questions/37535522
复制相似问题