Linux编程环境

来源:互联网 发布:手机性能监控软件 编辑:程序博客网 时间:2024/06/09 19:26

Linux 编程环境


1.编辑器 vi

(1)编辑器 vi 简介
    编辑器 vi 最初是由 Sun Microsystrms 公司的 Bill Joy 在1976 年开发的。启初,开发出了 Ex 编辑器,也称为行编辑器,后来开发了vi作为Ex的可视接口,一次能看到一屏的文本而不仅仅是一行,vi因此得名。vi在通过命令操作,界面不友好,对普通人不容易掌握。但是,其丰富的命令和强大的功能,以及占用资源少的特性,使得它在嵌入式Linux系统中,广泛使用。

(2)vi用法
    vi有三种模式:
        插入模式:  写代码
        可视模式:  复制、粘贴、删除、查找等
        
2.编译器 gcc

(1)编译器 gcc 简介  
    Linux系统下的 gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,它是GNU的代表作品之一,gcc是可以在多种硬件平台上编译出可执行文件的超级编译器,其执行效率比一般的编译器要高出20%-30%。编译器能将C、C++语言源程序、汇编语言源程序和目标程序编译、链接成可执行文件如果没有给出可执行文件的名字,gcc将生成一个默认名为a.out的可执行文件。在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件,而gcc则通过后缀来区别输入文件的类型。                                 

自己查找:
    GNU :是一个自由软件工程项目,对unix向上兼容的完整的自由软件系统
    GPL (General Public License):是GNU的通用公共许可证,同其它的自由软件许可证一样,许多社会公众享有:运行、复制软件的自由,发现传播软件的自由,获得软件原码的自由。

    GPIO:微控制芯片上的一个通用可编程io接口

(2)gcc 的编译过程
    源文件(.c .h)-> 预处理->编译->汇编->(静态库,动态库)链接->可执行文件

预处理(Preprocessing):

    主要处理源文件中,以'#'开头的语句,如#include  #ifdef  #define等,该阶段会产生一个中间文件 (*.i)。
    命令 gcc -E -o zmx.i zmx.c。(通常是程序警告)

编译阶段(Compilation):
    
    预处理完成后,gcc首先检查代码的规范性,以及是否有语法错误等。检查无误后,开始把代码翻译成汇编语言。
    命令:gcc -S -o zmx.s zmx.c

汇编阶段(Assembly):

    在汇编阶段,将输入的汇编文件 *.s,转换成目标文件 *.o, *.o 已经是二进制文件,即 0 和 1的机器语言,但是,它不是可执行的二进制文件。
    命令:gcc -c -o zmx.o zmx.c

链接阶段(Linking):-o

    汇编之后,进入链接。在链接阶段,通过链接各种静态库和动态库,得到可执行文件。
    命令:gcc -o star zmx.c

(3)gcc 常见的用法

    gcc -c    
    gcc -E    
    gcc -S    
    gcc -o    生成指定的输出文件
    gcc -v    查询gcc版本信息
    gcc -g    生成调试信息,gdb调试器可以利用该信息
    gcc -I    指定额外的头文件搜索路径
    gcc -L    指定额外的函数库搜索路径
    gcc -static    静态链接库,默认都是动态链接库
    gcc -w        不生成任何警告信息
    gcc -Wall    生成所有警告信息


    gcc -c zmx.c -o zmx
    gcc -o zmx zmx.c
    gcc zmx.c -g -o zzz
    

---------------------------------------------------------------------------

模块化编程:     

     例子:写一个四不像软件。

            1.写一个判断月份的程序
            2.写一个比较两个数大小的程序
            3.写一个随机数的程序
            4.写一个hello world程序
    架构:
             将每个模块写一个.c文件,文件不存在main(),将函数的声明写在.h文件里。
                   写一个main程序,包含各模块的功能。
     ----------------------------------------------------
           例如:第1步:编写 month.c
            #include <stdio.h>
            
            void month()
            {
               //业务逻辑代码
            }
                第2步:编写 month.h
            void month();

                第3步:编写 compare.c
            #include <stdio.h>
            
            void compare()
            {
                //业务逻辑代码
            }
                第4步:编写 compare.h
            void compare();
                第5步:编写 syso.c
            #include <stdio.h>

            void syso()
            {
                //业务逻辑代码
            }
                第6步:编写 syso.h
            void syso();
                第7步:编写 main.c
            #include <stdio.h>
            #include "month.h"
            #include "compare.h"
            #include "syso.h"
            
            void main()
            {
                printf("开始演示本程序!\n");
                month();
                compare();
                syso();
            
            
            }
                第8步:编写makefile
                second:    main.o compare.o syso.o month.o
                gcc -o second main.o month.o compare.o syso.o
                main.o: main.c
                gcc -c -o main.o main.c
                compare.o:compare.c
                gcc -c -o compare.o compare.c
                syso.o: syso.c
                gcc -c -o syso.o syso.c
                month.o: month.c
                gcc -c -o month.o month.c
                clean:
                rm -rf *.o second

                第9步:输入"make"命令,创建可执行程序 second
                第10步:输入"./second"执行程序
            (也可以不写Makefile,直接将每个模块的.c文件生成.o文件,然后将.o和.h文件与main.c文件整合.再用gcc -o second main.o month.o compare.o syso.o 生成了  可执行文件second,再./second执行即可。这种多次修改就比较繁琐!)


3.调试器 gdb
 
                    使用gdb: 1.生成gdb调试信息文件(gcc 源文件 -g -o 新文件名)
                                     2.直接进入:gdb 文件名  或者:gdb --->file 文件名
                            
(1)调试器 gdb 简介
    gdb是Linux系统上缺省(可装可不装的)使用的调试器。gdb也可以被移植到不同的平台上,如ARM系列处理器的调试器

(2)gdb 用法
    1.进入gdb调试环境,有两种方式。
    (1)在shell终端,直接输入 gdb ,会看到gdb的一些版本信息;然后使用file 命令调试可执行程序。  file star  (star 为需要调试的可执行程序)
    (2)在终端直接输入 gdb star.
     gdb 文件名
    2.gdb 的常用命令:

命令    简写    格式            含义

(C)file        file 文件名        加载文件
display        display 变量名        显示参数(设置监听变量)
 (D)run    r    run args        运行程序
list    l    list [开始,结束]     列出文件的代码清单
print    p    print 变量名        打印变量的内容
break    b    break [行号或函数名]    设置断点
continue c    continue [开始,结束]    继续运行
info    i    info 变量名        列出信息
next    n    next            下一行
step    S    step            进入函数(步入)

r----》s单步

quit    q    退出

delete        删除断点 (断点参数是第几个,加数字)
disable        禁用断点  
enable        恢复禁用的断点

4.make 和 Makefile

(1)make 和 Makefile 概述
    make 是一个命令,用来解析Makefile文件;
    Makefile 是一个文件,用来告诉 make 命令如何编译整个工程,生成可执行文件。

(2)make 命令
    make [选项]  [Makefile 文件]

make 执行的流程:

    1. 查找当前目录下的 Makefile 文件;
    2. 初始化 Makefile 文件中的变量;
    3. 分析 Makefile 中的所有规则;
    4. 为所有的文件创建依赖关系;
    5. 根据依赖关系,决定哪些目标文件要重新生成;
    6. 执行生成命令。

(3)Makefile 文件内容

    1. 规则
    (1)Makefile 是由规则来实现的: 目标  依赖   命令

    (2)Makefile 的格式:

            目标:  依赖
            <Tab>    命令
        目标和依赖之间,通过“:”分隔,命令前面,是由“Tab”键产生的空格。

        当 make 命令去执行 Makefile 文件时,其规则被这样处理:
        
    ·目标是文件,依赖也是文件。若依赖文件的时间,比目标文件的时间新,说明依赖文件被更新了。则运行规则包含的命令,产生新的目标文件。

    ·如果依赖的是另一条规则的目标,则先跳到另一条规则去执行命令,再返回当前规则。
    ·如果目标不是一个存在的文件,则一定执行。(目标不存在,必须执行)


    2. 变量

    (1)变量的基础
    (2)变量中的变量
    (3)变量的高级用法
    (4)追加变量值
    (5)环境变量
    (6)特殊(内部)变量


5.Linux 编程库
    在后面课程补充(驱动部分)

6.shell 脚本编程
    (1)建立和运行shell脚本
    (2)shell 中的变量
        1.用户自定义变量
        2.位置变量
        3.环境变量

    (3)shell 中的test命令
        1.字符串比较
        2.数值比较
        3.文件比较
    
    (4)shell中的流程控制语句
        1.条件语句(if)
        2.循环语句(for  、while 、 unit)

    (5)shell 程序中的函数
        1.函数定义格式
        2.函数调用格式