• Linux程序设计(一)入门


    1. linux程序

    Linux应用程序表现为两种特殊类型的文件:可执行文件脚本文件

    可执行文件:是计算可以直接运行的程序,相当于windows的.exe文件。

    脚本文件:一组指令的集合。这些指令由另一个程序(即解释器)来执行,它们相当于Windows下的.bat文件、.cmd文件。

    使用(:)分隔PATH变量的条目。MS-DOS和windows使用分号(;)。

    Linux使用正斜线(/)分隔文件名里的目录名。

    2. C语言编译器

    编译、链接和运行hello程序:

    zhangxin@zhangxin-VirtualBox:~/mypro$ gcc -o hello hello.c
    zhangxin@zhangxin-VirtualBox:~/mypro$ ./hello
    hello world !

    程序名(hello)前加“./”是指示shell去执行当前目录下给定名称的程序。

    -o name 选项告诉编译器将可执行程序放在何处。如果不写,编译器会把程序放在一个名为a.out(assembler output即汇编输出)的文件里。

    3. 开发系统导引

    3.1 应用程序

    (1)/usr/bin  : 系统为正常使用提供的程序,包括用于程序开发的工具,都可在目录/usr/bin中找到。

    (2)/usr/local/bin 或者 /opt : 系统管理员为某个特定的主机或网络添加的程序。

    (3)系统管理员喜欢使用/usr/local目录,因为它分离了厂商提供及后续添加的文件与系统本身的应用程序。

    3.2 头文件

    (1)对C语言来说,头文件在/usr/include目录及其子目录下。依赖于特定linux版本的头文件通常在/usr/include/sys和/usr/include/linux中找到。

    (2)调用C语言编译器时,可以使用-I标志来包含保存在子目录或者非标准位置中的include文件。

    gcc -I/usr/openwin/include fred.c

    上例指示不仅在标准位置,也在/usr/openwin/include目录中查找fred.c中包含的头文件。

    3.3 库文件

    库是一组预先编译好的函数的集合。

    标准系统库文件一般存储在/lib和/usr/lib目录中。

    .a : 传统的静态函数库。

    .so :共享函数库。

    -l :标志指示编译器要搜索的库文件。

    -L :编译器增加库的搜索路径。

    3.4 静态库

    静态库,也称归档文件(archive)。

    静态库实验:

    (1)为两个函数创建源文件,add.c和sub.c:

    //add.c
    #include <stdio.h>

    int add(int a, int b){
    return a + b;
    }

    //sub.c
    #include <stdio.h>
    
    int sub(int a, int b){
            return a - b;
    }

    (2)分别编译这些函数,产生要包含在库文件中的目标文件。

    zhangxin@zhangxin-VirtualBox:~/mypro$ gcc -c add.c sub.c
    zhangxin@zhangxin-VirtualBox:~/mypro$ ls
    add.c  add.o  hello.c  sub.c  sub.o

    -c :阻止编译器创建一个完整的程序。(-c Compile and assemble, but do not link)

    (3)创建一个头文件,将声明库文件中的函数。

    //lib.h
    
    int add(int, int);
    int sub(int, int);

    (4)调用程序(program.c)。

    //program.c
    #include <stdio.h>
    #include "lib.h"
    
    int main(){
    
            printf(" 5 + 4 = %d
    ", add(5, 4));
            printf(" 5 - 4 = %d
    ", sub(5, 4));
            return 0;
    }

    (5)编译并测试这个程序。

    zhangxin@zhangxin-VirtualBox:~/mypro$ gcc -c program.c
    zhangxin@zhangxin-VirtualBox:~/mypro$ gcc -o program program.o add.o sub.o
    zhangxin@zhangxin-VirtualBox:~/mypro$ ls
    add.c  add.o  hello.c  lib.h  program  program.c  program.o  sub.c  sub.o
    zhangxin@zhangxin-VirtualBox:~/mypro$ ./program
     5 + 4 = 9
     5 - 4 = 1

    (6)创建并使用一个库文件。

    用ar程序创建一个归档文件并将目标文件添加进去。

    zhangxin@zhangxin-VirtualBox:~/mypro$ ls
    add.c  add.o  hello.c  lib.h  program  program.c  program.o  sub.c  sub.o
    zhangxin@zhangxin-VirtualBox:~/mypro$ ar crv libcalc.a add.o sub.o
    a - add.o
    a - sub.o
    zhangxin@zhangxin-VirtualBox:~/mypro$ ls
    add.c  add.o  hello.c  libcalc.a  lib.h  program  program.c  program.o  sub.c  sub.o

    (7)要想成功的使用函数库,还需要为函数库生成一个内容表。

    randlib libcalc.a

    在编译器命令行的文件列表中添加该库文件以创建我们的程序:

    zhangxin@zhangxin-VirtualBox:~/mypro$ ls
    add.c  add.o  hello.c  libcalc.a  lib.h  program.c  program.o  sub.c  sub.o
    zhangxin@zhangxin-VirtualBox:~/mypro$ gcc -o program program.o libcalc.a
    zhangxin@zhangxin-VirtualBox:~/mypro$ ls
    add.c  add.o  hello.c  libcalc.a  lib.h  program  program.c  program.o  sub.c  sub.o
    zhangxin@zhangxin-VirtualBox:~/mypro$ ./program 
     5 + 4 = 9
     5 - 4 = 1

    nm命令:查看目标文件、函数库或者可执行程序里所包含的函数。

    3.5 共享库

    程序使用共享库时,链接方式是这样的:它本身不包含函数代码,而是引用运行时可访问的共享代码。

    linux和windows文件对比:

    项目 UNIX WINDOWS
    目标模块 .o .obj
    静态函数库 .a .lib
    程序 program(a.out) program.exe
    共享库 .so .dll

    参考资料:《Linux程序设计》第3版

  • 相关阅读:
    数组
    做了个进制转换图
    类的练习
    3.10l练习
    c#学习第二课
    c#第四课习题
    c#学习第三课
    学习PHP&MYSQL之——字符编码篇(一)
    中缀表达式转换成后缀表达式
    模板方法模式(Template Pattern)
  • 原文地址:https://www.cnblogs.com/sdlypyzq/p/4737215.html
Copyright © 2020-2023  润新知