将交叉编译链接到ARM时出现问题

时间:2011-06-21 22:37:25

标签: linux arm cross-compiling

我正在尝试为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

所以我认为我需要链接一些内容 - 也许我的工具链没有正确的库?我能够构建内核,所以我认为它是完整的。谢谢! This is the target board. - 运行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;
}

4 个答案:

答案 0 :(得分:2)

我得说,这是可疑的:-nostdlib

使用此标志怎么样?

答案 1 :(得分:1)

内核不使用C运行时库,因为库会执行很多(如果不是大多数)内核代码不允许的事情,例如文件i / o和分配内存。

通常,您根本不必指定库。 gcc假设正确。尝试完全删除LDFLAGS设置:我敢打赌它会更好。

答案 2 :(得分:1)

好的 - 终于解决了这个问题,从这里获取了一个工具链:

http://www.codesourcery.com/sgpp/lite/arm/portal/release1803

Hello World效果很棒!感谢您的建议

答案 3 :(得分:0)

您使用的工具链是否有名为“lcs3arm”的库?如果是这样,请尝试将其添加到列表中。您也可以尝试“-lcs3”本身

出于兴趣,您在这里使用哪个版本的GCC? (即CodeSourcery发布)