`

Linux下编程工具的使用(2) - GCC编译器

阅读更多

如何使用GCC编译器?

 

程序的编译过程

对于GUN编译器来说,程序的编译要经历预处理、编译、汇编、连接四个阶段,如下图所示:

 

     

 

从功能上分,预处理、编译、汇编是三个不同的阶段,但GCC的实际操作上,它可以把这三个步骤合并为一个步骤来执行。下面我们以C语言为例来谈一下不同阶段的输入和输出情况。

在预处理阶段,输入的是C语言的源文件, 通常为*.c。它们通常带有.h之类头文件的包含文件。这个阶段主要处理源文件中的#ifdef、 #include和#define命令。该阶段会生成一个中间文件*.i,但实际工作中通常不用专门生成这种文件,因为基本上用不到;若非要生成这种文件 不可,可以利用下面的示例命令:


gcc -E  test.c -o test.i

 

在编译阶段,输入的是中间文件*.i,编译后生成汇编语言文件*.s 。这个阶段对应的GCC命令如下所示:

 

GCC -S test.i -o test.s

 

在汇编阶段,将输入的汇编文件*.s转换成机器语言*.o。这个阶段对应的GCC命令如下所示:

 

GCC -c test.s -o test.o

 

最后,在连接阶段将输入的机器代码文件*.s(与其它的机器代码文件和库文件)汇集成一个可执行的二进制代码文件。这一步骤,可以利用下面的示例命令完成:

 

GCC test.o -o test

gcc使用样例

分步编译连接

编译:  gcc -c hello_gnome.c  -o hello_gnome.o -g -Wall `gnome-config --cflags gnome gnomeui`

连接: gcc hello_gnome.o -o hello_gnome `gnome-config --libs gnome gnomeui`

 

直接编译链接

编译连接: gcc hello_gnome.c -o hello_gnome -g -Wall `gnome-config --cflags gnome gnomeui` `gnome-config --libs gnome gnomeui`

 

gnome-config --cflags gnome gnomeui

-I/usr/include/gnome-1.0 -DNEED_GNOMESUPPORT_H -I/usr/lib/gnome-libs/include -I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include

gnome-config --libs gnome gnomeui

-rdynamic -L/usr/lib -lgnomeui -lart_lgpl -lgdk_imlib -lSM -lICE -lgtk -lgdk -lgmodule -ldl -lXi -lXext -lX11 -lgnome -lgnomesupport -lesd -laudiofile -lm -ldb-4 -lglib

 

常用选项说明

-g                  : 编译调试信息 

-Wall            : 产生所有警告信息

-I                   : 头文件查找路径

-rdynamic   : 动态连接库文件

-L                  : 库文件查找路径

-l                   : 包含的库文件,例如,-lgtk  就会被解释为 /usr/lib/libgtk.a

 

编程相关的重要文件目录

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

 

(系统级别)存放启动系统时用到的二进制文件

/bin                                     

/sbin                                   : 只有系统管理员(super user)才能执行的程序

 

(用户级别)用于存放用户使用的标准程序

/usr/bin                               

/usr/sbin                             : 只有系统管理员(super user)才能执行的程序

 

存放特定软件安装的程序

/usr/local/bin

/usr/local/sbin                   : 只有系统管理员(super user)才能执行的程序

 

库路径

 

/lib

/usr/lib

/usr/local/lib

 

头文件路径

 

/usr/inlcude

/usr/include/sys

/usr/include/linux

分享到:
评论

相关推荐

    arm-linux-gcc-4.6.4-arm-x86-64交叉编译器安装包(含详细安装教程)

    2. **GCC (GNU Compiler Collection)**:GCC是广泛使用的开源编译器套件,支持多种编程语言,如C、C++、Fortran等。在这个版本4.6.4中,它已针对ARM架构进行了优化,以生成高效的目标代码。 3. **安装步骤**:根据...

    arm-linux-gnueabihf-gcc编译器

    标题:“arm-linux-gnueabihf-gcc编译器”是针对ARM架构在Linux系统上进行交叉编译的重要工具。它允许开发者在非ARM架构(如x86或x86_64)的主机系统上构建运行在ARM设备上的应用程序。 交叉编译是指在一种体系结构...

    TDM-GCC编译器

    **TDM-GCC编译器详解** TDM-GCC(Tiny Dinosaur MinGW)是一款专为Windows操作系统设计的编译器套件,它基于著名的GCC(GNU Compiler Collection)并进行了优化,以更好地适应Windows环境。GCC是开源软件项目,包含...

    arm-linux-gcc交叉编译器适用 ARMV7-32

    `arm-linux-gcc`是GNU Compiler Collection(GCC)的一个定制版本,它包含了针对特定目标系统的编译器、链接器和其他工具链组件。 在Ubuntu系统中,安装和使用`arm-linux-gcc`交叉编译器通常涉及以下步骤: 1. **...

    arm-linux-gcc-5.4.0交叉编译工具.rar

    ARM-Linux-GCC工具链包含了预编译的C和C++编译器、链接器以及其他必要的工具,如汇编器和调试器,它们都针对ARM处理器进行了优化。 ARM-Linux-GCC 5.4.0 版本包含以下组件: 1. **GCC (GNU Compiler Collection)**...

    arm-Linux-gcc编译器

    在开发针对ARM平台的应用程序时,一个关键的工具就是编译器,特别是ARM-Linux-gcc编译器。本文将围绕"gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz"这一特定版本的编译器,深入探讨其特性和使用方法...

    aarch64-linux-gnu-gcc gcc version 7.5.0 (Linaro GCC 7.5-2019.12

    标题中的"aarch64-linux-gnu-gcc"是一个交叉编译器,用于在aarch64(也称为ARM64或AArch64)架构上构建Linux应用程序。它基于GNU工具链,是GCC(GNU Compiler Collection)的一个特定版本,这里是7.5.0,由Linaro...

    arm-linux-gcc-5.4.0.tar.gz交叉编译器

    总结,ARM-Linux-GCC 5.4.0交叉编译器是嵌入式Linux系统开发的得力工具,它的使用涵盖了环境配置、Makefile编写、编译和链接等多个环节。理解并熟练掌握这一工具,对于提升ARM平台上的软件开发能力至关重要。

    arm-linux-gcc-4.5.1-v6-vfp-20101103

    用户在解压后,可以将“opt”目录设置到环境变量PATH中,以便于命令行调用arm-linux-gcc编译器和其他相关工具。 总结一下,"arm-linux-gcc-4.5.1-v6-vfp-20101103"是友善之臂公司为ARM11处理器提供的一个交叉编译...

    arm-linux-gcc-4.8.4.tar.gz

    本文将深入探讨ARM-Linux-GCC-4.8.4这一特定版本的交叉编译器,帮助读者了解其功能、应用场景及如何使用。 一、什么是交叉编译器 交叉编译器,顾名思义,是一种能够在一种体系结构(宿主机)上编译出另一种体系...

    xilinx-gcc-arm-linux-gnueabi-201801 WINDOWS下ZYNQ LINUX交叉编译器

    "WINDOWS下ZYNQ LINUX交叉编译器"说明了这个工具链是在Windows操作系统下使用的,用于构建针对ZYNQ平台上运行的Linux系统的应用程序。这通常涉及到将C或C++源代码转化为能在ZYNQ SoC的ARM内核上执行的二进制文件。...

    Linux实验十一 arm-Linux交叉编译环境搭建

    2. **GCC(GNU Compiler Collection)简介**:GCC是一套由GNU项目提供的编译器集合,支持多种编程语言,如C、C++等。`arm-linux-gcc`是专为arm架构设计的GCC版本之一。 3. **Fedora简介**:Fedora是一款基于Linux的...

    arm-linux-gcc-5.4.0.tar.gz

    总之,`arm-linux-gcc`是进行ARM架构Linux系统交叉编译的重要工具,它的安装和使用涉及到Linux环境变量配置、编译选项选择、库依赖管理等多个方面。熟练掌握这些技能,对于在嵌入式领域开发高效、可靠的应用至关重要...

    xtensa-esp32-elf-gcc8_4_0-esp-2021r2-linux-armel.tar.gz

    这个工具链包括了GNU Compiler Collection (GCC) 8.4.0版本,它是一个广泛使用的开源编译器,能够将C、C++等编程语言源代码转换为适合ESP32硬件执行的目标代码。 ESP32是Espressif Systems公司推出的一种高性能、低...

    arm-linux-gcc-4.4.3安装包及安装教程

    现在,你可以通过运行`arm-linux-gcc --version`来检查编译器是否成功安装并可以使用。如果返回版本信息,说明安装成功。 **七、开始交叉编译** 至此,你已经具备了使用`arm-linux-gcc-4.4.3`进行交叉编译的基础...

    内网环境下Linux环境gcc gcc-c++编译器安装所需依赖

    总结来说,内网环境下Linux上安装GCC和G++编译器,以及用于编译调试的GDB,需要确保系统拥有必要的依赖,并通过正确的方式安装这些工具。这不仅为C/C++程序的编译提供了基础,也为服务器软件如Nginx的自定义编译提供...

    riscv32-esp-elf-gcc8_4_0-esp-2021r2-linux-armel.tar.gz

    《RISC-V架构下的ESP开发工具链:riscv32-esp-elf-gcc8_4_0-esp-2021r2-linux-armel.tar.gz详解》 在现代计算机科学领域,RISC-V架构以其开放源码、精简指令集、可扩展性以及高性能的特点,逐渐成为嵌入式系统和...

    Linux下使用codeblocks交叉编译ARM-LINUX-GCC程序

    Linux 下使用 CodeBlocks 交叉编译 ARM-LINUX-GCC 程序 在这个资源中,我们将学习如何使用 CodeBlocks 在 Linux 平台下交叉编译 ARM-LINUX-GCC 程序。交叉编译是一种在不同的平台之间编译代码的技术,能让开发者在...

    arm-linux-gcc-4.3.2交叉编译器

    GCC 是一个强大的开源编译器套件,支持 C、C++、Objective-C、Fortran、Ada 和 Go 等多种编程语言。在交叉编译环境中,GCC 被配置来生成与宿主机不同的目标架构的代码。"arm-linux-gcc" 实际上是 GCC 的一个实例,...

    arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 交叉编译器.zip

    "arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2" 文件就是这样一个针对ARM平台的交叉编译工具链,它使得开发者能够在非ARM环境里高效地构建和调试针对ARM处理器的应用程序。 GCC,全称GNU Compiler Collection,是由GNU...

Global site tag (gtag.js) - Google Analytics