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汇编语言,William Hohl'学习ARM汇编。我有第一版使用ARMv4T。我在Raspberry Pi 1(ARMv6)上运行代码。所以,我正在拼凑来自全国各地的信息尝试让这些例子运行。这个让我感到难过。一般来说,任何指针都非常受欢迎。谢谢
答案 0 :(得分:0)
Machael Petch的评论是正确的。使用全局调用main会导致C运行时用于处理程序启动和完成。
我们作弊只是为了让事情变得更容易一些。我们写了一个C main 汇编程序中的函数只返回2;这样我们的方案 由于C运行时处理初始化和终止,因此更容易 我们的计划。 ... 这是必需的,因为C运行时将调用main。如果不是 全局,它不会被C运行时和链接阶段调用 会失败。
http://thinkingeek.com/2013/01/09/arm-assembler-raspberry-pi-chapter-1/