arm-eabi-gcc:找不到入口符号_start

时间:2014-12-15 16:37:40

标签: linux gcc arm

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

  

arm-eabi-gcc hello.c   -I /家庭/亚历杭德罗/ Android的NDK-R 10c中/平台/ Android的21 /弓臂/ usr / include目录   -nostdlib -Wl,-rpath-link = / usr / arm-linux-gnueabi / lib -L ​​/ usr / arm-linux-gnueabi / lib -lc

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

  

ld:警告:找不到条目符号_start;默认为000080b0

如何正确链接所有内容?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

只需尝试取出-nostdlib选项,因为编译器认为不允许使用存在_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对象链接到您正在运行的程序并放入-nostdlib