c语言-----库

<---百草枯--->

qq:916923477<---->maooam

1、是库的概念:

把原文件(.c)编译成目标文件(.o),把目标文件简单组合放在一起

 

2、库的分类:

 

1、动态库:
    动态库在程序编译时并不会被连接到目标代码中,而是在程序运行时才被载入,因此,在程序运行时还需要动态库存在,因此代码体积较小。
 
2、静态库:
     静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。

 

 

3、静态库与动态库各自的优缺点:

3.1动态库:

动态库的优点:
    体积小;
    如果有多个程序共同调用了某动态库,在内存中只需要一份库代码。
 
动态库的缺点:
    运行时依赖库,会影响实时性。

 

3.2静态库:

静态库的优点:
    可移植性好,实时性会更好;
 
静态库的缺点:
    体积较大;
    如果有多个程序共同调用了某些静态库,在内存中需要多份代码。
 
运行:
    编译的时候就连接进去了。

 

4、库的制作

4.1、静态库的制作

#CROSS_COMPILE = arm-linux-gnu- CC = $(CROSS_COMPILE)gcc AR = $(CROSS_COMPILE)ar $(CC)  -g -O0 -Wall  -c -o myls.o -myls.c (把myls改为你自己的文件名就ok了) $(AR) rcs libls.a lslib.o xxx.o yyy.o  //创建静态库 ------------------------------------- $(CC) -o myls_static myls.c -L. libls.a (-L:GCC的编译选项:指定库的路径)

 

4.2、动态库的制作

#CROSS_COMPILE = arm-linux-gnu- CC = $(CROSS_COMPILE)gcc $(CC)  -g -O0 -Wall  -c -fPIC lslib.c -o lslib.o  (-fPIC:必须编译选项,表示生产位置无关代码) $(CC)  -shared -Wl,-o libls.so.1.0 lslib.o xxx.o yyy.o zzz.o -lc  (libls.so.1.0)(-shared:必须编译选项,表示生成动态库) ln -s libls.so.1.0 libls.so ---------------------------------- $(CC) -o myls myls.c -L. -lls  (-L. -lls  从当前路径下找libls.so动态库进行链接) --------------------------------------------- $(CC)  -shared -Wl,-soname,libls.so  -o libls.so.1.0 lslib.o -lc (生成动态库,-soname,libls.so 自动创建软链接)

 

 

 

附加:

    查看库所依赖的其他库和路径:

    LDD = $(CROSS_COMPILE)ldd    

  $(LDD) libls.so

posted on 2013-08-13 21:22  Jason-liang  阅读(325)  评论(0)    收藏  举报

导航