1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > cc=arm-linux 针对基于嵌入式ARM的Linux系统的交叉编译

cc=arm-linux 针对基于嵌入式ARM的Linux系统的交叉编译

时间:2021-09-18 01:02:47

相关推荐

cc=arm-linux 针对基于嵌入式ARM的Linux系统的交叉编译

我尝试为嵌入式(定制)基于ARM的Linux系统编译一些C代码。我设置了一个名为arm-linux-gnueabi-gcc-4.4的交叉编译器的Ubuntu VM,因为它看起来像我所需要的。现在,当我编译我的代码与此GCC,它会产生一个二进制这样的:针对基于嵌入式ARM的Linux系统的交叉编译

$ file test1

test1: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked

(uses shared libs), for GNU/Linux 2.6.31,

BuildID[sha1]=0x51b8d560584735be87adbfb60008d33b11fe5f07, not stripped

当我尝试运行嵌入式Linux此二进制,我得到

$ ./test1

-sh: ./test1: not found

权限就足够了。我只能想象,什么是错的与二进制格式,所以我看了一些工作二进制作为参考:

$ file referenceBinary

referenceBinary: ELF 32-bit LSB executable, ARM, version 1, dynamically linked

(uses shared libs), stripped

我看到有一些差异,但我没有知识推导我需要什么修复以及我如何解决这个问题。有人可以解释哪些差异至关重要吗?

另一件事我看着都依赖关系:

$ ldd test1

libc.so.6 => not found (0x00000000)

/lib/ld-linux.so.3 => /lib/ld-linux.so.3 (0x00000000)

(有趣的是,这部作品在目标系统上虽然不能执行二进制)嵌入式系统只有可用libc.so.0。我想我需要告诉编译器我想链接的libc版本,但据我了解,gcc只是与它附带的版本链接,这是正确的吗?我能做些什么呢?

编辑:这是我使用的Makefile:

CC=/usr/bin/arm-linux-gnueabi-gcc-4.4

STRIP=/usr/bin/arm-linux-gnueabi-strip

CFLAGS=-I/usr/arm-linux-gnueabi/include

LDFLAGS=-nostdlib

LDLIBS=../libc.so.0

SRCS=test1.c

OBJS=$(subst .c,.o,$(SRCS))

all: test1

test1: $(OBJS)

$(CC) $(LDFLAGS) -o main $(OBJS) $(LDLIBS)

$(STRIP) main

depend: .depend

.depend: $(SRCS)

rm -f ./.depend

$(CC) $(CFLAGS) -MM $^>>./.depend;

clean:

rm -f $(OBJS)

include .depend

-09-20

flyx

+0

如果你对内存紧张,小得多的'uClibc'可以代替'glibc'。但是,您需要一个* gcc *编译器来构建使用'uClibc'。获得* gcc *,* uClibc *(或* glibc *)工作工具链和朋友以及从源代码构建Linux内核,Busybox和其他软件包的一种(相对)简单的方法是使用'BuildRoot'。使用良好的编译器+ libc组合,您可以静态链接您的应用程序,并独立于目标库。 –

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。