码迷,mamicode.com
首页 > 其他好文 > 详细

静态库和动态库的分析

时间:2015-12-02 22:49:03      阅读:361      评论:0      收藏:0      [点我收藏+]

标签:

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

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  来重启配置文件

静态库和动态库的分析

标签:

原文地址:http://www.cnblogs.com/yangziwen0709/p/5014433.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!