为什么我用arm-linux-gcc生成的文件在目标板上无法执行

时间:2022-06-14 15:09:14
为什么我用arm-linux-gcc生成的文件在目标板上无法执行,而arm-elf-gcc -Wl,-elf2flt生成的文件
就可以执行。是不是和操作系统有关,我的操作系统是uclinux

6 个解决方案

#1


http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=55934&start=15


我也正在编译blob,遇到的编译问题是一样的。这里说说的我的做法(使用环境RedHat 9): 
1. 编辑文件 configure ,把所有arm-linux 改为arm-elf; 在580行处(“ac_ext=c”之前)插入 LDFLAGS=-elf2flt ,保存文件。 

2.运行命令./configure --with-board=mba-44b0 --with-linux-prefix=/usr/local/src/uClinux-dist/linux-2.4.x (这是我的uclinux目录) --host=arm-elf 

结果:LDFLAGS = -elf2flt -static -nostdlib 

3.运行make 

4.编译到arm-elf-objcopy -O binary -R .note .comment -S blob-start-elf32 blob-start出现错误(与你的一样): 
arm-elf-objcopy:blob-start-elf32:File format not recognized 
5.分析blob-start-elf32编译的命令 
arm-elf-gcc -Os -I/usr/local/src/uClinux-dist/linux-2.4.x/include 
-Wall -march=armv4 -mtune=strongarm1100 
-fomit-frame-pointer -fno-builtin -mapcs-32 -nostdinc 
-elf2flt -static -nostdlib -o blob-start-elf32 
-Wl,-T,./start-ld-script start.o ledasm.o memsetup-s3c44b0.o -lgcc 

使用了-elf2flt 选项,把blob-start-elf32编译成flat格式。 

6.到目录 blob/src/blob目录下直接执行编译命令(把-elf2flt去掉) 
arm-elf-gcc -Os -I/usr/local/src/uClinux-dist/linux-2.4.x/include 
-Wall -march=armv4 -mtune=strongarm1100 
-fomit-frame-ointer -fno-builtin -mapcs-32 -nostdinc 
-static -nostdlib -o blob-start-elf32 
-Wl,-T,./start-ld-script start.o ledasm.o memsetup-s3c44b0.o -lgcc 

再执行一次 
arm-elf-objcopy -O binary -R .note .comment -S blob-start-elf32 blob-start 

结果顺利编译通过 

显然 arm-elf-objcopy 中 blob-start-elf32 必须为elf格式 
其后的blob-rest-elf32 ,blob-chain-elf32编译也应该是elf格式。 

7.结论:所以编译源文件要使用 -elf2flt 才能编译通过,但编译连接 blob-start-elf32 又不能使用-elf2flt开关 

8.直接修改blob/src/blob的Makefile ,但运行make 后,此Makefile又回复原样,实在没有办法,不知道如何修改。 

9.本人一直在windows下编写程序,对makefile 的编辑不是很熟悉,虽然知道错误的原因, 但不知怎样修改makefile ,此事很急,请各位大侠赐教!


问题终于解决了!换个编译器,到http://www.lomx.net/cn/lom_arm9_tooltrain.htm 
下载一个编译器吧





应该是跟你的一样子的
看看吧

#2


我的问题主要是在移植pppd的时候,用make CC=arm-linux-gcc  生成的是elf文件,在我的目标板(uclinux)是执行不了的,我需要把它转换为flat格式
于是我用make CC=arm-elf-gcc -Wl,-elf2flt,但是编译出错了

#3


请问,这个使用arm-elf-gcc 编译 BLOB (44B0X) 的问题到底是如何解决的啊? 我也是碰到了一摸一样的问题,Linux内核是用uClinux. 也尝试下载了上面提到的ARM-LINUX编译器, 实际上没有解决问题,至少看起来来编译器针对的CPU CORE 都不一样。
  解决了问题的那位同学能否详细说说你的步骤和方法。 谢谢了。

#4


我倒是很顺利。。。没遇到过。。。

#5


学习

#6


但运行make 后,此Makefile又回复原样,实在没有办法,不知道如何修改。 


说明你改错了地方。这个makefile是自动生成的,根据相关的配置文件,要改也的在源头去改。

#1


http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=55934&start=15


我也正在编译blob,遇到的编译问题是一样的。这里说说的我的做法(使用环境RedHat 9): 
1. 编辑文件 configure ,把所有arm-linux 改为arm-elf; 在580行处(“ac_ext=c”之前)插入 LDFLAGS=-elf2flt ,保存文件。 

2.运行命令./configure --with-board=mba-44b0 --with-linux-prefix=/usr/local/src/uClinux-dist/linux-2.4.x (这是我的uclinux目录) --host=arm-elf 

结果:LDFLAGS = -elf2flt -static -nostdlib 

3.运行make 

4.编译到arm-elf-objcopy -O binary -R .note .comment -S blob-start-elf32 blob-start出现错误(与你的一样): 
arm-elf-objcopy:blob-start-elf32:File format not recognized 
5.分析blob-start-elf32编译的命令 
arm-elf-gcc -Os -I/usr/local/src/uClinux-dist/linux-2.4.x/include 
-Wall -march=armv4 -mtune=strongarm1100 
-fomit-frame-pointer -fno-builtin -mapcs-32 -nostdinc 
-elf2flt -static -nostdlib -o blob-start-elf32 
-Wl,-T,./start-ld-script start.o ledasm.o memsetup-s3c44b0.o -lgcc 

使用了-elf2flt 选项,把blob-start-elf32编译成flat格式。 

6.到目录 blob/src/blob目录下直接执行编译命令(把-elf2flt去掉) 
arm-elf-gcc -Os -I/usr/local/src/uClinux-dist/linux-2.4.x/include 
-Wall -march=armv4 -mtune=strongarm1100 
-fomit-frame-ointer -fno-builtin -mapcs-32 -nostdinc 
-static -nostdlib -o blob-start-elf32 
-Wl,-T,./start-ld-script start.o ledasm.o memsetup-s3c44b0.o -lgcc 

再执行一次 
arm-elf-objcopy -O binary -R .note .comment -S blob-start-elf32 blob-start 

结果顺利编译通过 

显然 arm-elf-objcopy 中 blob-start-elf32 必须为elf格式 
其后的blob-rest-elf32 ,blob-chain-elf32编译也应该是elf格式。 

7.结论:所以编译源文件要使用 -elf2flt 才能编译通过,但编译连接 blob-start-elf32 又不能使用-elf2flt开关 

8.直接修改blob/src/blob的Makefile ,但运行make 后,此Makefile又回复原样,实在没有办法,不知道如何修改。 

9.本人一直在windows下编写程序,对makefile 的编辑不是很熟悉,虽然知道错误的原因, 但不知怎样修改makefile ,此事很急,请各位大侠赐教!


问题终于解决了!换个编译器,到http://www.lomx.net/cn/lom_arm9_tooltrain.htm 
下载一个编译器吧





应该是跟你的一样子的
看看吧

#2


我的问题主要是在移植pppd的时候,用make CC=arm-linux-gcc  生成的是elf文件,在我的目标板(uclinux)是执行不了的,我需要把它转换为flat格式
于是我用make CC=arm-elf-gcc -Wl,-elf2flt,但是编译出错了

#3


请问,这个使用arm-elf-gcc 编译 BLOB (44B0X) 的问题到底是如何解决的啊? 我也是碰到了一摸一样的问题,Linux内核是用uClinux. 也尝试下载了上面提到的ARM-LINUX编译器, 实际上没有解决问题,至少看起来来编译器针对的CPU CORE 都不一样。
  解决了问题的那位同学能否详细说说你的步骤和方法。 谢谢了。

#4


我倒是很顺利。。。没遇到过。。。

#5


学习

#6


但运行make 后,此Makefile又回复原样,实在没有办法,不知道如何修改。 


说明你改错了地方。这个makefile是自动生成的,根据相关的配置文件,要改也的在源头去改。