zoukankan      html  css  js  c++  java
  • 动态库/静态库

    1.静态库:将程序运行所需要的库文件,在程序编译的时候,一起编译进去,这样程序运行的时候,就不需要环境中有特定的库文件才能正常运行了,但是相对来说,由于把库文件添加进去一起编译了,所以生成的可执行文件的内存就比较大。

      缺点:1.占用的空间大,造成空间的浪费。

         2.如果程序需要修改某一部分,就要重新对整个文件进行编译,链接。

       优点:程序移植方便,不需要考虑环境下是否有相应的库文件。

    比如设计数学运算工具模块
    mathmodel.h,  mathmodel.c
    main.c  用到了数学运行函数
    gcc  -o  main  main.c  mathmodel.c
    gcc  -o  mathmodel.o  -c  mathmodel.c  --第一步
    gcc  -o  main  main.c  mathmodel.o  --可把mathmodel.o装入库中(静态库, 动态库)

    静态库的制作步骤:

    把mathmodel.c 制作静态库
    1.把源文件编译成.o文件 (二进制文件)
    gcc -o mathmodel.o -c mathmodel.c 
    2. 用归档工具ar归档为一个库文件 (lib库名.a)
    ar crv libmathmodel.a mathmodel.o
    3. 使用静态库编译程序
    gcc -o main main.c  -L.  -lmathmodel
     -L.  --后面添加库所在的路径(自动搜索的库路径) 
     -lmathmodel ---指定链接哪一个库(-l库名)
    如果是在当前路径下面,则是(L.)

    2.动态库:编译的时候不需要将所需的库文件一起编译进去,但是在程序运行的时候,当前环境下需要有这些库文件才能运行,编译生成的可执行文件就不会那么大。

      优点:1.程序升级方便。

         2.代码和数据共享。

         3.可以选择性的加载部分模块。

         4.节省空间和资源

     动态库制作:

    1.    编写源文件
    mathmodel.c
    2.    把源文件编译成二进制文件 mathmodel.o
    gcc -fPIC -o mathmodel.o -c mathmodel.c 
    3.    把.o文件打包成库
    gcc -fPIC -shared -o libmathmodel.so mathmodel.o
    4.    用动态库编译程序
    gcc -o main main.c -L. -lmathmodel
    5.    运行程序
    gec@ubuntu:/mnt/hgfs/05/code/shared$ ./main

    可能会出现的问题:

    ./main: error while loading shared libraries: libmathmodel.so: cannot open shared object file: No such file or directory

    解决问题--添加库环境变量(告诉系统到哪个目录下找这个库)

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD

    PS:如果有哪里写错了,请指正,大家互相学习一下之前这里还写了一点makefile的,但简单学习makefile之后,发现自己写的太烂了,就删了。

  • 相关阅读:
    Windows XP下 Android开发环境 搭建
    Android程序的入口点
    在eclipse里 新建android项目时 提示找不到proguard.cfg
    64位WIN7系统 下 搭建Android开发环境
    在eclipse里 新建android项目时 提示找不到proguard.cfg
    This Android SDK requires Android Developer Toolkit version 20.0.0 or above
    This Android SDK requires Android Developer Toolkit version 20.0.0 or above
    Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead
    Windows XP下 Android开发环境 搭建
    Android程序的入口点
  • 原文地址:https://www.cnblogs.com/smallqizhang/p/12441164.html
Copyright © 2011-2022 走看看