• 静态库和动态库的分析


    本质上来说库是一种可执行代码的二进制形式。

    linux下的库有两种:静态库和共享库(动态库)

    静态库在程序编译时会被连接到目标代码中:程序运行时将不再需要该静态库,因此体积较大。

    优点:程序运行时将不再需要该静态库

    缺点:可执行文件的体积较大。

          相同的库可能会需要被多次加载。

    静态库: libxxxxx.a 

    动态库:动态库在程序编译时并不会被连接到目标代码中,         

    优点: 在程序运行时动态库才会被载入内存,因此代码体积较小。

    缺点: 因此在程序运行时还需要动态库存在。

    静态库的制作:将功能函数编译成库。

    1、先生成目标文件

       gcc -c -Wall fun.c -o fun.o

    2、ar crs  libfun.a  fun.o

        将fun.o文件 打包生成libfun.a的静态库

       库的命名:lib库名.a 

    使用:   

    -L:指定库的路径

    -l :指定需要连接的库的名字

       gcc test.c -o test -L .  -lfun 

    动态库的制作和使用:

    1、需要生成目录文件

       gcc -c -fPIC -Wall  fun.c -o fun.o

       fPIC:说明库可以被加载到内存的任意位置

    2、gcc -Wl,-soname,libfun.so  -shared fun.o -o libfun.so.1

         -Wl,-soname,libfun.so  需要连接的库

    libfun.so.1  实际生成的库。

    库的命名:lib库名.so

    3、 ln -s   绝对路径/libfun.so.1    libfun.so

    4、gcc test.c -o test -L . -lfun 

    共享库的加载方法:

    1、动态库需要被放置到/usr/lib  或者  /lib目录下。 

       只需要将软连接移动过去。

    2、将库的路径添加到系统环境变量中

        LD_LIBRARY_PATH

        exprot  LD_LIBRARY_PATH=库的路径

    3、将库的路径添加到  /etc/ld.so.conf/xxx.conf 的配置文件中

        sudo  ldconfig  来重启配置文件

  • 相关阅读:
    ERP SYSTEM 开发指南(一)简单模块开发
    机器学习--决策树
    机器学习---线性模型
    机器学习
    《IDA Pro 权威指南》学习
    内核漏洞利用技术
    word2vec、seq2seq
    Ring0级的探索
    ActiveX 控件的漏洞挖掘
    FTP的漏洞挖掘
  • 原文地址:https://www.cnblogs.com/yangziwen0709/p/5014433.html
Copyright © 2020-2023  润新知