簡體   English   中英

arm-eabi-gcc:找不到條目符號_start

[英]arm-eabi-gcc: cannot find entry symbol _start

我已經安裝了兩個工具鏈來在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 -nostdlib -Wl,-rpath-link = / usr / arm-linux -gnueabi / lib -L ​​/ usr / arm-linux-gnueabi / lib -lc

但是當我編譯它時,我得到一個鏈接器警告:

ld:警告:找不到條目符號_start; 默認為000080b0

如何正確鏈接所有內容?

_start存在於C運行時庫中。 您將需要將此鏈接與您的二進制文件關聯。 在Linux上,通常可以在名為crt0.a的文件中找到該文件,它可能是由編譯器或LibC構建的。

只需嘗試刪除-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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM