zoukankan      html  css  js  c++  java
  • 静态链接库与动态链接库 (一)静态链接库的编译与使用

    1. 所谓静态链接库,说白了就是在你把写好的代码编译的时候,就把你引用的库一起给编进去了,从此后你编出来的执行程序跟外面都不再有任何关系,即使这个库更新了,你也搭不上边儿。

        其次,如果系统中许多类似的程序都需要用到这个库,那么各自在编译的时候都需要把这个库给编进去,浪费存储空间(加载到内存 里应该也是浪费内存空间的)。

        linux系统中静态库的名字一般叫xxx.a, 所以如果看到一个以 .a结束的文件那么它就是一个静态链接库文件。

        .a 文件实际上是多个.o(汇编生成的机器码文件)文件使用ar命令打包起来的,仅仅是为了方便使用,抛开.a 直接使用.o也是一样的。

    2. 上代码,看看静态库是如何被编译出来以及如何被使用的

       首先写一个sum.c,如下,很简单,里面只有一个Sum函数,把两个数相加的和返回

     int Sum(int Number1, int Number2)
     {
         return Number1 + Number2;
     }
    

      然后,写一个声明它的sum.h

    int Sum(int Number1, int Number2);
    

      最后,写主函数

     #include<stdio.h>
     #include<sum.h>
      
     void main()
     {
         int Num1 = 1;
         int Num2 = 2;
         int iRet = 0;
     
         iRet = Sum(Num1, Num2);
         printf("Num1 + Num2 = %d.", iRet);
         return;
    }
    

    3. 编译静态库,打开终端后用vim写代码

    lv@lenovo: $ ls
    main.c    sum.c    sum.h
    lv@lenovo: $ gcc -c sum.c
    lv@lenovo: $ ls
    main.c    sum.c    sum.h    sum.o
    lv@lenovo: $ 
    lv@lenovo: $ 
    lv@lenovo: $ ar cr libsum.a sum.o
    lv@lenovo: $ ls
    libsum.a    main.c        sum.c        sum.h        sum.o
    lv@lenovo: $
    

        其中ar命令解释如下

    ar rv libtest.a hello.o hello1.o
    

        生成一个库,库名字是test,链接时可以用-ltest链接。该库中存放了两个模块hello.o和hello1.o。选项前可以有‘-'字符,也可以没有

        编译主程序并运行:

    lv@lenovo: $ gcc -o sumappd main.c -L . -lsum
    lv@lenovo: $ ls
    libsum.a    main.o        sum.h        sumappd
    main.c        sum.c        sum.o
    lv@lenovo: $ ./sumappd 
    Num1 + Num2 = 3
    

     “-L .”指明了当前lib所在的路径是在本目录,-l表示链接libsum.a这个lib库。

  • 相关阅读:
    e621. Activating a Keystroke When Any Child Component Has Focus
    e587. Filling Basic Shapes
    e591. Drawing Simple Text
    e595. Drawing an Image
    e586. Drawing Simple Shapes
    e636. Listening to All Key Events Before Delivery to Focused Component
    在 PL/SQL 块的哪部分可以对初始变量赋予新值? (选择1项)
    Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项)
    你判断下面语句,有什么作用?(单选)
    Oracle数据库表空间与数据文件的关系描述正确的是( )
  • 原文地址:https://www.cnblogs.com/lvchaoshun/p/5966212.html
Copyright © 2011-2022 走看看