• 基于Linux的C编程(一)


    一、GCC概述

    1、GCC概述

    一个c/c++程序从开始编码到生成二进制可执行文件至少要经过四个步骤。

      (1)预处理:对源文件的宏进行展开。

      (2)编译:将源程序编译成汇编文件。

      (3)汇编:将汇编文件编译成机器码。

      (4)链接:将目标文件和外部符号进行链接,生成可执行文件。

    GCC在编译时根据输入文件类别和参数选项,可以分别完成上述四个步骤,产生对应的处理文件,也可以一次性完成所有步骤,直接生成可执行文件。

    下面是一些GCC文件扩展名规范: 

      (1).c为后缀的文件,是C语言源代码文件。

      (2).h为后缀的文件,是头文件。

      (3).C,.cc,.cpp,.cp或.cxx为后缀的文件,是c++源代码文件。

      (4).h为后缀的文件,是程序所包含得而头文件。

      (5).i为后缀的文件,是已经预处理过的C源代码。

      (6).ii为后缀的文件,是已经预处理过的c++源代码文件。

      (7).m为后缀的文件,是object-c源代码文件。

      (8).o为后缀的文件,是编译后的目标文件。

      (9).s为后缀的文件,是汇编语言源代码。

      (10).S为后缀的文件,是经过预编译的汇编语言源代码文件。

    2.GCC使用方法

    在使用GCC编译器的时候,我们必须给出一系列必要的参数选项和文件名称。

    GCC最基本的用法是:gcc [options] [filenames]

    其中options就是编译器需要的选项,filenames给出相关的文件名称。下面介绍基本的几个常用选项:(假设源程序文件名为test.c)

    (1)无选项编译链接

      用法:gcc  test.c

      作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out

    (2)选项-o

      用法:gcc test.c -o test

      作用:将test.c预处理、汇编、编译并廉洁成可执行文件test。-o选项用来指定输出文件的文件名。

    (3)选项-E

      用法:gcc -E test.c -o test.i

      作用:将test.c预处理输出test.i文件。

    (4)选项-S

      用法:gcc -S test.i

      作用:将预处理输出文件test.i汇编成test.s文件

    (5)选项 -c

      用法:gcc -c test.s

      作用:将汇编输出文件test.s编译输出test.o文件。

    (6)无选项链接

      用法:gcc test.o -o test

      作用:将编译输出文件test.o链接成最终可执行文件。

    (7)选项-O

      用法:gcc -O test.c -o test

      作用:使用编译优化级别编译程序。级别为1-3,级别越大优化效果越好,但编译时间越长。

    (8)多源文件的编译方法

    如果有多个源文件,基本上有两种编译方法(假设有两个源文件为test.c和testfun.c)

    1、多个文件一起编译

      用法:gcc testfun.c test.c -o test

      作用:将testfun.c和test.c分别编译后链接成test可执行文件。

    2、分别编译各个源文件,之后对编译后输出的目标文件链接。

      用法:gcc -c testfun.c   //将testfun.c编译成testfun.o

           gcc -c test.c       //将test.c编译成test.o

           gcc -o testfun.o test.o -o test  //将testfun.o和test.o链接成test

    以上两种方法相比较,第一种方法编译时需要所有的文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。

    3、c程序调试

    c程序的调试分为静态调试和动态调试。静态调试用在程序编译阶段查错并修正错误,它主要利用GCC编译器对语法错误的检查进行排错。

    动态调试则用在程序运行阶段的错误检查与修正,适用于检查算法的错误、输入输出的错误等。

    程序的动态调试需要借助调试工具,Linux系统包含了一个叫gdb(GNU DeBugger)的GNU调试工具。gdb是是一个用来调试C和C++程序的调试器,是一个交互式工具,工作在字符模式下。以下是gdb所提供的一些功能:

      (1)设置断点。

      (2)监视程序变量的值。

      (3)程序的单步执行。

      (4)修改变量的值。

      为了使gdb正常工作,必须使用-g选项编译源文件,使程序在编译时包含调试信息。在命令行上键入gdb并按回车键就可以运行gdb。

    进入gdb环境后,就可以输入相应的命令对程序进行调试。

      (1)file:装入想要调试的可执行文件。

      (2)kill:终止正在调试的程序。

      (3)list:查看指定文件或者函数的源代码,并标出行号。

      (4)next:单步执行,但不进入函数内部。

      (5)step:单步执行而且进入函数内部。

      (6)run:执行当前被调试的程序。

      (7)quit:退出gdb环境。

      (8)watch:监视一个变量的值而不管它何时被改变。

      (9)print:查看变量或表达式的值。

      (10)break:在代码里设置断点,这将使程序执行到这里时被挂起。

      (11)make:不退出gdb就可以重新产生可执行文件。

      (12)Shell:不离开gdb就执行Shell命令。

      具体的gdb操作手册请参照:https://www.cnblogs.com/mister-lv/p/6022841.html

  • 相关阅读:
    一些关于视频相关基础概念
    熟悉某项目代码---零碎小知识总结
    C#中如何判断一个字符是汉字
    面试碰到一个这样的题------ 输入为一个字符串和字节数,输出为按字节截取的字符串
    C# 拼Json格式字符串 返回前段js 出错解决
    学习maple
    格林公式
    麦克斯韦方程组 (Maxwell's equation)的简单解释
    关于Ciarlet的泛函的一道homework的一个想法
    关于分开编写多个LaTeX文件的一点微小的总结
  • 原文地址:https://www.cnblogs.com/RanWhoo/p/10012486.html
Copyright © 2020-2023  润新知