gcc 如何编译成bin文件

嵌入式开发的时候,我们的编译一个*.S文件,并最终生成bin文件,编译命令大致如下:

CC=arm-softfloat-linux-gnu-gcc

LD=arm-softfloat-linux-gnu-ld

OBJCOPY=arm-softfloat-linux-gnu-objcopy

 

$(CC) -g $(CFLAG) -c boot.S     #先将boot.S文件生成boot.o

$(LD) -g -Bstatic -T$(LDFILE) -Ttext 0x12345600 boot.o --start-group -Map boot.map -o boot.elf    #再将boot.o生成boot.elf, boot.elf通常就是可执行文件,类似于gcc -o test test.c 中的test文件,在Linux Shell下输入./test就可以执行。

$(OBJCOPY) -O binary boot.elf boot.bin    #接着将boot.elf->boot.bin,这样可以缩小代码尺寸。

 

运行arm-softfloat-linux-gnu-objdump -h boot.elf 可以查看该文件的信息,但是如果变成

arm-softfloat-linux-gnu-objdump -h boot.bin会提示错误,为了看boot.bin文件信息,输入:

arm-softfloat-linux-gnu-objdump -h -b binary -m arm boot.bin就可以了。哈哈我也是现学了一招,其中参数-h可以被替换成为-D, -S, -s等等,请用arm-softfloat-linux-gnu-objdump --help查看器中表示的意义。

 

说说ELF Bin 文件区别:

我们有了Linux OS,为了运行可执行文件,他们是遵循ELF格式的,通常gcc -o test test.c,生成的test文件就是ELF格式的,这样就可以运行了。

arm-softfloat-linux-gnu-objcopy命令将去掉ELF格式的东西,仅仅保留最纯的汇编(不知道如何解释),

在Embedded中,如果上电开始运行,没有OS系统,如果将ELF格式的文件烧写进去,包含一些ELF格式的东西,arm运行碰到这些指令,就会导致失败,如果用arm-softfloat-linux-gnu-objcopy生成纯粹的汇编,程序就可以一步一步运行。


  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gcc升级到4.7以上 参考文档 https://blog.51cto.com/191226139/2066137 安装编译依赖软件包 yum install gcc gcc-c++ glibc-static -y cp -a /mnt/backup/software/php-7.3.9.tar.gz /root/ 下载gcc源码包与依赖包 wget -c http://mirror.koddos.net/gcc/releases/gcc-4.8.5/gcc-4.8.5.tar.gz tar -zxvf /root/gcc-src/gcc-4.8.5.tar.gz -C /root/ tar xvf /root/gcc-src/cloog-0.18.4.tar.gz -C /root/gcc-4.8.5/ tar xvf /root/gcc-src/gmp-6.1.2.tar.xz -C /root/gcc-4.8.5/ tar xvf /root/gcc-src/isl-0.14.tar.gz -C /root/gcc-4.8.5/ tar xvf /root/gcc-src/mpc-1.0.3.tar.gz -C /root/gcc-4.8.5/ tar xvf /root/gcc-src/mpfr-3.1.4.tar.gz -C /root/gcc-4.8.5/ 或者 tar xvf /root/gcc-src/mpfr-3.1.4.tar.bz2 -C gcc-4.8.5/ mv /root/gcc-4.8.5/cloog-0.18.4 /root/gcc-4.8.5/cloog mv /root/gcc-4.8.5/gmp-6.1.2/ /root/gcc-4.8.5/gmp mv /root/gcc-4.8.5/isl-0.14/ /root/gcc-4.8.5/isl mv /root/gcc-4.8.5/mpc-1.0.3/ /root/gcc-4.8.5/mpc mv /root/gcc-4.8.5/mpfr-3.1.4/ /root/gcc-4.8.5/mpfr cd /root/gcc-4.8.5/ mkdir gcc-build && cd gcc-build ../configure --prefix=/usr/local/gcc-4.8.5 --enable-checking=release --enable-bootstrap --enable-languages=c,c++ --disable-multilib --enable-gather-detailed-mem-stats --with-long-double-128 出错后清空编译目录下的相关文件 # make distclean 查看CPU的核数,使用时应使用2倍值 lscpu |grep -A 1 'Model name' make -j 4 或者 make 编译过程约40~50分钟左右,占用2.7G空间 make install 检验版本 /usr/local/gcc-4.8.5/bin/gcc -dumpversion /usr/local/gcc-4.8.5/bin/g++ -dumpversion /usr/local/gcc-4.8.5/bin/c++ -dumpversion 添加LD_LIBRARY_PATH 临时生效 export LD_LIBRARY_PATH="/usr/local/gcc-4.8.5/lib64:$LD_LIBRARY_PATH" 永久生效 echo '/usr/local/gcc-4.8.5/lib64' > /etc/ld.so.conf.d/gcc4.8.5.conf ldconfig 出现以下提示,把这个文件删除了或忽略它:ldconfig: /usr/local/gcc-4.8.5/lib64/libstdc++.so.6.0.19-gdb.py is not an ELF file - it has the wrong magic bytes at the start. rm -rf /usr/local/gcc-4.8.5/lib64/libstdc++.so.6.0.19-gdb.py cd /usr/local/gcc-4.8.5/bin && ln -s gcc cc 添加环境变量 echo 'export PATH=/usr/local/gcc-4.8.5/bin:$PATH' >> /etc/profile source /etc/profile 查看版本 gcc -v cc -v

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值