交叉编译到ARM时出现问题

问题描述

| 我正在尝试为ARM目标编译一个“ Hello World”应用程序。我正在Ubuntu / VMWare上使用gcc进行交叉编译。如果我为主机编译,则可以正常工作。当我为目标编译时,出现以下错误
/root/picokernel/toolchain/arm-eabi/lib/libcs3hosted.a(hosted-sbrk.o): In function `_sbrk\':
sbrk.c:(.text+0x74): undefined reference to `__cs3_heap_limit\'
/root/picokernel/toolchain/arm-eabi/lib/libcs3hosted.a(hosted-sbrk.o):(.data+0x0): undefined reference to `__cs3_heap_start\'
make: *** [HelloWorld] Error 1
所以我认为我需要链接一些东西-也许我的工具链没有正确的库?我能够构建内核,所以我认为它已经完成。谢谢!这是目标板。 -运行Angstrom或Android。 生成文件
CC=$(CROSS_COMPILE)gcc
LD=$(CROSS_COMPILE)ld 
CROSS_LIB1=/root/picokernel/toolchain/arm-eabi/lib 
CROSS_LIB2=/root/picokernel/toolchain/lib/gcc/arm-eabi/4.2.1
CFLAGS=-Wall
LDFLAGS= -L$(CROSS_LIB1) -L$(CROSS_LIB2) -lc -lcs3hosted -lg -lgcc --entry main
HelloWorld: HelloWorld.o 
    $(LD) HelloWorld.o $(LDFLAGS)
清洁:     rm -f HelloWorld HelloWorld.o 程序:
#include <stdio.h>

int main(int argc,char **argv)
{
   printf(\"Hello World\\n\");
   return 0;
}
    

解决方法

        我得说,这很可疑:
-nostdlib
不使用该标志怎么样?     ,        内核不使用C运行时库,因为该库执行内核代码所不允许的许多(如果不是大多数的话)事情,例如文件I / O和分配内存。 通常,您根本不需要指定库。
gcc
假设正确的事情。尝试完全删除设置
LDFLAGS
:我敢打赌它会更好。     ,        好的-终于解决了这个问题,在这里从源代码中获取了一个工具链: http://www.codesourcery.com/sgpp/lite/arm/portal/release1803 Hello World很棒!谢谢你的建议     ,        您使用的工具链中是否有一个名为“ lcs3arm”的库?如果是这样,请尝试将其添加到列表中。您也可以尝试自己使用“ -lcs3” 出于兴趣,您在这里使用的是哪个版本的GCC? (即哪个CodeSourcery发布)     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...