zoukankan      html  css  js  c++  java
  • day02,静态库和动态库

           一、首先我们来看一下什么是静态库和动态库,在这之前我们来看一下编译成可执行文件的过程:

             

               1、静态库(.a、.lib):就是在使用的时候会把代码复制到文件中;

                  它的优点:独立,在链接后不需要静态库源文件

                   它的缺点:太占用内存空间,不利于修改和维护

               2、动态库(.so、.dll):把代码的地址放到目标文件中

                    它的优点:占用内存空间小,维护和修改方便

                     它的缺点:程序运行的时候必须保证共享库能找到(不独立),速度会稍微慢一点

              二、使用纯静态库格式:

                       gcc -static.c文件(我这里是linux系统环境下)

              三、创建静态库步骤:

                     1、编写源程序.c文件

                      2、编译的时候生成.o文件

                      3、生成静态库.a

                        格式为:ar -r  库文件名称  所有的.o文件

                        库文件名称规范:lib 开头   .a结尾       中间放库名

                        即:ar -r  libmyku.a 

                         下面看例子:

                           

     1 [tu@localhost unix]$ vi day02.c   #生成一个.c源文件
     2 [tu@localhost unix]$ gcc day02.c
     3 [tu@localhost unix]$ ./a.out       #进行编译输出,我这里利用gcc编译器
     4 hellow world
     5 [tu@localhost unix]$ gcc -c day02.c
    #这里的意思是把.c文件改成.o文件,结果如下
    6 [tu@localhost unix]$ ls
    7 a.out day02.c day02.o
    #生成静态库
    8 [tu@localhost unix]$ ar -r libmyku.a day02.o 9 ar: 正在创建 libmyku.a 10 [tu@localhost unix]$ ls 11 a.out day02.c day02.o libmyku.a

    注明:gcc 编译器的安装步骤,先安装好yum ,然后在切换到/etc/yum.repos.d/文件目录下,最后进行yum install gcc,就可以了(我这里是在线安装的gcc ,要系统连上网就可以)

            静态库链接使用步骤:

              1、编写使用程序.c 文件,并保存退出

              2、编写.c 文件生成目标文件

               gcc   -c   X.c

              3、链接静态库和.o文件,有三种方式:

                        a、强行链接:

                                 gcc.o文件库名称

                        b、双L链接法(重点):

                               gcc.o文件  -l库名   -L库所在目录

                         c、单L链接法:

                               gcc.o文件  -l库名称(需要配置环境变量—)

           注明:ldd命令可以查看使用了那些库文件

  • 相关阅读:
    pandas基本操作
    MySQL数据库(五)使用pymysql对数据库进行增删改查
    MySQL数据库(四)多表查询
    MySQL数据库(三)索引总结
    MySQL数据库(二)-数据库的增删改查
    MySQL数据库(一)
    Linux 解压/压缩xxx.zip格式(unZip Zip的安装和使用)
    关系型数据库和非关系型数据库的对比
    进程、线程、协程的区别
    python迭代器与生成器详解
  • 原文地址:https://www.cnblogs.com/1121518wo/p/10809913.html
Copyright © 2011-2022 走看看