Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2095400
  • 博文数量: 229
  • 博客积分: 7217
  • 博客等级: 上校
  • 技术积分: 3224
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-19 17:23
个人简介

个人主页https://xugaoxiang.com,微信公众号: Dev_Club 或者搜索 程序员Club

文章分类

全部博文(229)

文章存档

2017年(1)

2016年(20)

2015年(23)

2013年(1)

2012年(23)

2011年(68)

2010年(62)

2009年(31)

分类: LINUX

2009-06-11 16:19:59

   Linux下类库主要有静态库和动态库两种库。其中,静态库在程序连接的时候会自动的连接到程序里,所以一但编译完成,静态库也就不需要了。静态库通常以.a结尾。而动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。通常以.so结尾。因此,静态库相对于共享库来说有更高的效率但是也要消耗更多的空间。值得注意的是,如果既有静态库又有动态库,在编译时默认的使用动态库。

1、制作静、动态库:

         b.c

              #include

              int test()

               {

                    printf("This is first to use static lib!\n");
 

                }

                 静态库:
 

                         gcc -c b.c产生b.o

                         ar -r libb.a b.o产生libb.a静态库

                 动态库:

                        gcc -c -fpic b.c
                        gcc -shared b.o -o libb.so
 

    2、调用静、动态库:

           c.c

            #include

            int main(int argc,char** argv)

           {

               printf("Call static/dynamic lib:");

               test();
             

               return 0;

            }
 

              静态库:

                    gcc -o c.static c.c libb.a(c.static为可执行文件名)
 

              动态库:
 
                     gcc -o a c.c ./libb.so

run it:
./a
Call static/dynamic lib:This is first to use static lib!

djstava@djstava:~/execise/lsp$ ldd a
        linux-gate.so.1 =>  (0xb7ff6000)
        ./libb.so (0xb7ff1000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e7c000)
        /lib/ld-linux.so.2 (0xb7ff7000)
阅读(1558) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~