Linux的编译知识

本地编译

本地编译是指在Linux操作系统上使用与该操作系统相同的CPU架构进行编译。在本地编译中,开发人员可以直接使用GCC等编译器进行编译,非常方便快捷。

编译一个hello world程序的示例命令为:

gcc -o hello hello.c

这将会生成一个可执行文件 hello,可以使用下面的命令来运行程序:

./hello

交叉编译

交叉编译是指使用一台与目标系统不同的计算机(比如使用x86架构的计算机编译ARM架构的代码),通过交叉编译工具链进行编译生成可在目标系统上运行的程序。

交叉编译的优势在于可以在速度较快的开发计算机上进行编译,生成针对目标系统的可执行文件,以节省目标系统上的时间和资源。

编译一个ARM架构的hello world程序的示例命令为:

arm-linux-gnueabi-gcc -o hello_arm hello.c

这将会生成一个针对ARM架构的可执行文件 hello_arm,可以将该文件复制到目标系统上运行。

安装arm架构的gcc命令为

如果你的 Linux 系统上没有安装 arm-linux-gnueabihf-gcc,可以按照以下步骤进行安装

1、打开终端,并使用 apt-get 命令更新软件包列表:

sudo apt-get update

2、然后使用 apt-get 命令安装 arm-linux-gnueabihf-gcc

sudo apt-get install gcc-arm-linux-gnueabihf

一个C程序在Linux下的4个阶段

在Linux下,一个C程序的编译过程通常可以分为以下4个阶段:

预处理

预处理是指在编译过程中对源代码进行预处理。主要的任务是将源代码中的宏定义、条件编译等预处理指令进行展开,并将结果保存到一个中间文件中。预处理结果包括去掉注释、展开宏定义、加入头文件等。

预处理的命令是 gcc -E,它将源文件进行预处理后输出到标准输出,我们可以使用重定向将其保存到一个文件中。例如,下面的命令将预处理结果保存到hello.i文件中:

gcc -E hello.c -o hello.i

编译

编译是指将预处理后的代码翻译成汇编代码,同时对代码进行语法检查、类型检查等操作,生成目标文件。目标文件是一种机器码的二进制文件,其中包含了可执行代码和符号表等信息。

编译的命令是 gcc -S,它将源文件编译成汇编代码,也可以使用 -c 选项生成目标文件。例如,下面的命令将生成汇编代码文件hello.s:

gcc -S hello.c -o hello.s

汇编

汇编是指将编译生成的汇编代码翻译成机器码,生成二进制目标文件。汇编器根据汇编代码中的伪指令和操作码来生成机器码。

汇编的命令是 gcc -c,它将汇编代码转换为机器码生成目标文件,例如:

gcc -c hello.s -o hello.o

链接

链接是将多个目标文件合并成一个可执行文件,同时解析符号引用关系并进行重定位,生成可在系统上运行的二进制文件。

链接的命令是 gcc,它将多个目标文件链接为一个可执行文件,例如:

gcc hello.o -o hello

其中,hello.o 是目标文件,hello 是可执行文件。在链接过程中,链接器会将 hello.o 中的符号引用解析为实际的地址,并将其与其他库文件链接起来生成可执行文件 hello。

通过这4个阶段,我们可以将C程序编译成可执行文件并在Linux系统上运行。

你可能感兴趣的:(Linux学习,linux,gcc,arm)