c动态库和静态库

  在商业开发中,提供的代码 不是 .c,也不是.o文件,而是把 .o文件打包成 库文件。程序员只需要提供 头文件和库文件。
  Unix/Linux的库文件分为两类:
   静态库
   共享库(动态库)
   静态库 就是把.o文件做了一个归档,在调用函数时,把整个函数的代码段直接复制到可执行文件中。
   共享库 就是把.o文件做了一个归档,在调用函数时,把函数在库中的地址复制到可执行文件(或其它的共享库)中。
   优缺点:
   静态库执行效率稍高,在运行代码时不需要访问静态库,但体积偏大,不利于修改和维护。
   共享库执行效率比静态库慢,在运行代码时需要访问共享库,但体积小,利于修改和维护。
   开发中,多半使用共享库。
  静态库的创建和调用:
   创建步骤:
    1 写源代码.c,保存退出。
    2 编译源代码,生成目标文件.o。
     gcc -c add.c
    3 生成静态库文件
     ar -r 库文件名 add.o (可以多个.o)
     库文件名的规范:
     以lib开头,以.a结尾,中间起一个库名
     比如:libmyku.a 库文件名
           库名:myku
   调用步骤:
    1 写调用的源代码test.c,保存退出。
    2 编译test.c,生成.o文件。
     gcc -c test.c
    3 连接test.o和静态库文件,有三种方法
     3.1 直接连接  gcc test.o libmyku.a
     3.2 先配置环境变量LIBRARY_PATH,将库文件所在的路径配置进去,然后用:
     gcc test.o -l库名
     3.3 双L连接法
     gcc test.o -l库名 -L库所在的路径
  注:1 使用库需要额外提供头文件
      2 系统库已经配置好,所以不需要双L,如果没有配置,也需要双L。
  共享库的创建和使用
   创建
    1 写源程序,保存退出。
    2 编译和生成共享库。
   gcc -fpic -shared add.c -olibmyku.so
   其中,-fpic貌似省略也可以,最好挂上
    也有库名的规范,和静态库一样
   调用
    1 写调用源程序,保存退出。
    2 gcc -c 编译,生成.o文件。
    3 连接共享库,方式和静态库一样。
  注:共享库在运行时 需要配置环境变量LD_LIBRARY_PATH,否则运行不起来。
  ldd命令可以查看 程序关联的库文件。
   ldd a.out (也可以是共享库文件)
  Unix/Linux也提供了一些可以直接调用系统库中函数的API:(了解)
   #include <dlfcn.h>
   dlopen() -> 直接打开一个共享库文件
   dlsym() -> 从一个打开的共享库找到函数
   dlclose() -> 关闭共享库
   dlerror() -> 判断以上3个函数是否出错
 
  程序员在做项目时,除了写正常代码之外,也需要进行错误的处理(出了错怎么办)。
  后期的语言(C++/Java)都是使用异常机制处理错误(exception),但C语言没有异常机制,C处理错误的方式是 使用返回值标识错误。
  1 如果返回值为int,并且返回的数据不包括负数,返回-1代表出错,数据正常返回。
  2 如果返回值为int,但返回的数据包括负数,数据就不再return,而是用指针带出来,返回-1代表出错,0代表成功。
  3 如果返回值为指针,返回0代表出错,其他值代表正常。(有些函数返回-1代表出错)
  4 如果函数不可能出错,或者不需要处理出错,返回值用void。
  注:以上只是常规情况,也有特例。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值