Hello World
我正在尝试在我的 Android 手机上组装和运行一个简单的程序。我的主机笔记本电脑是Ubuntu 22.04
64 位系统。我下载了android-ndk-r27c
并将其解压到我的 SDK 所在的 Android 文件夹中。
这是我从这里获取的 hello64bit.s ,它的路径是/home/developer/Android/android-ndk-r27c-linux/android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/bin
/* Data segment: define our message string and calculate its length. */
msg:
.ascii "Hello, ARM64!\n"
len = . - msg
.text
/* Our application's entry point. */
.globl _start
_start:
/* syscall write(int fd, const void *buf, size_t count) */
mov x0, #1 /* fd := STDOUT_FILENO */
ldr x1, =msg /* buf := msg */
ldr x2, =len /* count := len */
mov w8, #64 /* write is syscall #64 */
svc #0 /* invoke syscall */
/* syscall exit(int status) */
mov x0, #0 /* status := 0 */
mov w8, #93 /* exit is syscall #93 */
svc #0 /* invoke syscall */
当我运行时./aarch64-linux-android27-clang -o hello64.o hello64bit.s
出现以下错误:
ld.lld: error: duplicate symbol: _start
>>> defined at crtbegin.c
>>> /home/developer/Android/android-ndk-r27c-linux/android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/bin/./../sysroot/usr/lib/aarch64-linux-android/27/crtbegin_dynamic.o:(_start)
>>> defined at /tmp/hello64bit-fb91b4.o:(.text+0x0)
clang: error: linker command failed with exit code 1 (use -v to see invocation)
当我将名称更改start
为时,start1
出现undefined main
错误:
ld.lld: error: undefined symbol: main
>>> referenced by crtbegin.c
>>> /home/developer/Android/android-ndk-r27c-linux/android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/bin/./../sysroot/usr/lib/aarch64-linux-android/27/crtbegin_dynamic.o:(_start_main)
我做错什么了?