我尝试创建一个较小版本的hello world。
#define _GNU_SOURCE
#include<unistd.h>
void _start()
{
syscall(SYS_write, 1, "Hello, World!\n", 14);
syscall(SYS_exit, 0);
}
如果我尝试gcc -Wall -g -s -O3 hworld.c -o hello7 -nostartfiles
,此代码正常运行。我想得到一个较小版本的hello world。所以,我尝试使用-nostdlib
。它不起作用,如果我尝试使用gcc -Wall -Os -nostdlib -o hello7 hworld.c
它会给我错误。
hworld.c: In function ‘_start’:
hworld.c:7:11: error: ‘SYS_write’ undeclared (first use in this function)
syscall(SYS_write, 1, "Hello, World!\n", 14);
^
hworld.c:7:11: note: each undeclared identifier is reported only once for each function it appears in
hworld.c:8:11: error: ‘SYS_exit’ undeclared (first use in this function)
syscall(SYS_exit, 0);
I try to use #include<sys/syscall.h> It gives me other errors.
hworld.c:(.text+0x18): undefined reference to `syscall'
hworld.c:(.text+0x27): undefined reference to `syscall'
collect2: error: ld returned 1 exit status
我了解到我需要使用系统调用包装器。它叫libc.a
。它位于/usr/lib/x86_64-redhat-linux6E/lib64/libc.a
如何使用此包装器来解决错误?请帮帮我。
答案 0 :(得分:0)
这在RHEL 6.10上可以正常工作:
holder.getAdapterPosition()