[英]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.