Linux arm eabi gcc:找不到输入符号\u start

Linux arm eabi gcc:找不到输入符号\u start,linux,gcc,arm,Linux,Gcc,Arm,我安装了两个工具链来在x86主机上编译ARM/Linux。现在,我必须用ARM eabi gcc为ARM/Linux(Android)编译一个程序。此编译器没有任何库可在Linux中使用,因此我需要执行下一个命令来编译C程序: arm eabi gcc hello.c -I/home/alejandro/android-ndk-r10c/platforms/android-21/arch-arm/usr/include -nostlib-Wl,-rpath-link=/usr/arm-linux

我安装了两个工具链来在x86主机上编译ARM/Linux。现在,我必须用ARM eabi gcc为ARM/Linux(Android)编译一个程序。此编译器没有任何库可在Linux中使用,因此我需要执行下一个命令来编译C程序:

arm eabi gcc hello.c -I/home/alejandro/android-ndk-r10c/platforms/android-21/arch-arm/usr/include -nostlib-Wl,-rpath-link=/usr/arm-linux-gnueabi/lib-L/usr/arm-linux-gnueabi/lib-lc

但是当我编译它时,我得到一个链接器警告:

ld:警告:找不到输入符号\u start;默认为000080b0


如何正确链接所有内容?

\u start
存在于C运行时库中。您需要将其与二进制文件链接。在Linux上,这通常出现在名为
crt0.a
的文件中,可能是由编译器或LibC构建的。

只需去掉-nostlib选项即可,因为编译器认为不允许使用包含_start函数的启动文件

但还有另一种方法

。实现您自己的crt0.o,它应该基本上包含_start函数

 void _start()

{


ctor_dtor_hook *hook;



__syslib_init();

for (hook = __CTORS__; *hook; hook++)
     (*hook)();

main();

for (hook = __DTORS__; *hook; hook++)
     (*hook)();
}
如果您试图实现c,请使用int main()++

并将crt0.o对象链接到正在运行的程序,并放置-nostlib