编译工具链

GCC命令:

格式:gcc -[命令选项]  文件名(这里指需要编译的文件名)

一个C语言程序需要经过这几个过程才能进行一个可以执行的文件

例如hello.c这个源文件

Hello.c——> hello.i——>hello.s——>hello.o——>hello

-E          -S        -C

将一个汇编文件编译成一个可以烧写到开发板中二进制文件的步骤

(1)执行命令arm-linux-gcc -c -g  XXX.S (注意最后的扩展名是大写)

(2)执行命令arm-linux-gcc -T  XXX.lds -o  XXX.elf  XXX.o

(3)执行命令arm-linux-objcopy  -O binary  XXX.elf  XXX.bin (注意第一命令选项是大写的O)

编译工具链:
arm-linux-gcc

例子:arm-linux-gcc  -g -c  led.S

注释:-g -c 将只编译不连接,编译后将产生一个led.o的文件

arm-linux-ld

例子:arm-linux-ld -Tled.lds -o led.elf  led.o

注释:-T 后接脚本文件,生成.elf 格式的文件 最后面接文件需要连接的 所有.o 格式的文件

arm-linux-readelf

例子:arm-linux-readelf  -a led.elf

注释:用于读取.elf文件的所有信息

例子:arm-linux-readelf -d  hello

注释:用于读取编译成功的文件需要哪些库的信息

arm-linux-objdump

例子:arm-linux-objdump -D -S hello

注释:用于将一个已经编译好的文件进行反汇编

例子:arm-linux-objdump -D-S hello >dump

注释:将一个编译好的可执行hello文件进行反汇编, >用于反汇编后文件过大将反汇编文件保存在一个叫dump的文件中。

但是这样的反汇编代码不易阅读,做如下改进:

(1)arm-linux-gcc  -g helo.c -o hello

注释:-g 表示调试编译

(2)arm-linux-objdump -D-S hello >dump

注释:将一个调试编译的文件反汇编后保存在文件dump中。这样的反汇编文件易于阅读

arm-linux-objcopy -O binary led.elf -o led.bin

注释:直接用gcc编译的出来的文件是一个.elf格式的文件,只能运行与linux平台,因为linux中有一个elf解释器。将其解释成可以执行的文件。所以需要将其装换成二进制文件。-O binary 表示将其转换成二进制文件后跟需要转换的文件

以上过程过于复杂:

Make命令可以直接将以上三个过程一步执行

原文地址:https://www.cnblogs.com/big-devil/p/8589421.html

时间: 2024-09-30 02:56:51

编译工具链的相关文章

Linux上安装编译工具链

在Linux上安装编译工具链,安装它会依赖dpkg-dev,g++,libc6-dev,make等,所以安装之后这些依赖的工具也都会被安装.ubuntu软件库中这么描述 Informational list of build-essential packages If you do not plan to build Debian packages, you don't need this package. Starting with dpkg (>= 1.14.18) this package

ARM64编译工具链下载

下面是自制的用于编译ARMv8指令的交叉编译工具链: 1.运行在PC上,支持SVE指令,不支持SVE ACLE,版本GCC9.2 https://pan.baidu.com/s/1_NnwajWCelT3rRUuM-yl6Q 2.运行在Qemu+Ubuntu18.04+ARM64,支持SVE ACLE,版本GCC9.0 https://pan.baidu.com/s/1qHeKnH5MiTCw_v9GnRJwJg 3.运行在Firefly RK3399 + Ubuntu16.04,支持SVE A

编译工具链,生成各个平台的ffmpeg版本的库

1.在开始动手编译ffmpeg之前我们来梳理一下几个概念,gcc.g++.msvc.mingw.clang.cmake.make.qmake 作为一个windows软件工程师,以为长时间浸淫在各种强大的IDE的世界里,对编译的过程和相关的工具链还是相当陌生的.上面举出来的几个词语是自己在要编译各种平台的库的时候遇到的,因为Qt是跨平台的,所以要求相关的库也要跨平台: gcc/g++ 是c和c++对应的编译器,完成代码的编译和链接过程,clang也可以用来编译c++ oc,编译oc的时候效率是gc

GNU编译工具链介绍---Antoconf

大家在下载很多自由软件的源码下来编译的时候,都要用到configure这个命令,然后make,make install等等,这里我们就浅显地介绍一下什么是autoconf: 1. 基本介绍 autoconf就是一个生成shell脚本(或者其他操作系统上的可解释脚本或程序)的程序,生成的shell脚本用来根据所在的编译环境对源码进行配置.举个很简单的例子,比如我在Linux和Mac上面编译同样一份源码,编译出的程序可能一个显示Linux版本信息,一个显示Mac的版本信息,这就是autoconf起到

嵌入式交叉工具链编译

读者可能会有疑问,为什么要用交叉编译器?交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台 (X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统.这种方法在异平台移植和嵌入式开发时非常有用.相对与交叉编译,平常做的编译叫本地编译,也 就是在当前平台编译,编译得到的程序也是在本地执行.用来编译这种跨平台程序的编译器就

Ubuntu 编译 ARM-Linux-Gcc 工具链 -- 通过crosstool-NG制作工具链

1.手动下载制作过程中所需要的包,节省时间 所用包如下(不同版本所有包版本有所不同) libtool-2.4.6 linux-3.2.87 gmp-6.1.2 mpfr-3.1.5 isl-0.16.1 mpc-1.0.3 libelf-0.8.13 expat-2.2.0 ncurses-6.0 libiconv-1.15 gettext-0.19.8.1 binutils-2.28 gcc-5.4.0 glibc-2.25 duma_2_5_15 gdb-7.12.1 ltrace-0.7.

Linux下获取arm的交叉编译工具链

转载请注明文章:Linux下获取arm的交叉编译工具链 出处:多客博图 这里介绍,Linux下获取arm的交叉编译工具链,比如arm-linux-gnueabihf-gcc.arm-linux-gneabihf-gcc等. 前言 这里有一个专门的说法: “arm-linux-gnueabihf-gcc是由 Linaro 公司基于GCC推出的的ARM交叉编译工具.可用于交叉编译ARM系统中所有环节的代码,包括裸机程序.u-boot.Linux kernel.filesystem和App应用程序.使

Android开发实践:Android交叉编译工具链的使用

前面2篇文章分别介绍了Android NDK编译的命令行参数,以及如何在任意目录使用Android.mk来编译本地c/c++代码,Andriod.mk和ndk-build只不过是Android官方提供了一套封装过的Android交叉编译环境而已,其实,你可以不用它,而直接通过传统的Makefile文件来编译你的c/c++代码的,本文即介绍如何直接通过传统的Makefile文件来编译可用于Android平台的库文件. 经常搞嵌入式开发的朋友对于交叉编译环境应该并不陌生,说白了,就是一组运行在x86

关于LINUX运行交叉编译工具链后make出现No such file or directory

刚刚make出来,心情挺激动的,从安装UBUNTU到运行编译工具链真的是弄了有一周了.用的是UBUNTU14的版本和韦东山那个版本真的是差的太多了,所以问题层出不穷.今天这个问题我一开始以为是环境变量没设置对,结果各种百度按照他们的设置,但是我路径的根目录明明有arm-linux-gcc这个文件,但就是显示No such file or directory!在网上找资料间无意看到有人提示可能是版本不兼容的问题我现再用的是64为的系统,而编译工具链是32位的,不兼容,所以要安装ia32-libs.