liunx C 静态库、共享库的生成和使用

来源:互联网 发布:尾气分析仪数据分析 编辑:程序博客网 时间:2024/05/01 21:53
  静态库的生成步骤:
   1 写源程序 add.c,保存退出。
   2 编译源程序,得到目标文件(.o文件)。
     gcc -c
   3 打包生成静态库文件
     ar -r lib名字.a xx.o (.o文件可以多个)
   库文件名字 命名规范:以lib开头,以 .a结束


   注:在调用静态库时,需要库文件和头文件。
  静态库的调用步骤:
   1 写调用的源程序 test.c ,保存退出
   2 编译代码,生成 .o文件。
   3 连接test.o 和 静态库,连接方式有三种:
    a) gcc test.o lib名字.a (直接连)
    b) 先配置环境变量LIBRARY_PATH,把静态库文件所在的路径配置进去,然后:
     gcc test.o -l库名字 (库名字去掉lib和.a)
    c) gcc test.o -l库名字 -L库路径


   注:Unix多用第三种方式。


  共享库的生成步骤:
   1 编写源程序 add.c,保存退出。
   2 编译源程序,生成 .o文件。
    gcc -c -fpic add.c (不写-fpic也行)
   3 生成共享库文件(.so)
    gcc  -shared add.o -olib名字.so
    也需要提供头文件。


  共享库的使用步骤:
   共享库的使用步骤 与 静态库基本相同。
  注:共享库的连接方式和静态库一样,但在运行时需要额外配置环境变量 LD_LIBRARY_PATH,否则就找不到库文件。
  export LD_LIBRARY_PATH=.


  ldd 命令可以查看共享库的调用关系。


  共享库还有一种特殊的使用方式,就是像打开一个文件一样的使用。
   步骤:
   1 打开一个共享库文件。dlopen()
   2 在打开的共享库文件中获取一个函数。dlsym
   3 执行函数。
   4 关闭共享库文件。dlclose()
  dlerror() 处理错误信息。


   dlopen()有两个参数,第一个参数是文件名,第二个参数必须是:RTLD_LAZY 或 RTLD_NOW,区别:
  RTLD_LAZY - 延迟加载,open时不真正加载,到使用时再加载。
  RTLD_NOW  - 现在加载,open的同时完成加载


   dlerror()在调用 dlopen/dlsym/dlclose之后立刻调用,效果:如果上面的函数出现错误,返回错误信息,如果没有错误,返回NULL。
   
  C程序员的错误处理
   C语言通过函数的返回值代表错误,方式:
   1 如果返回值 是 指针类型,一般用NULL(0)代表出错。特殊情况下,用 -1 代表出错。
   2 返回值是int类型,如果返回数据不可能是负数,可以用 -1 代表出错,其他数据正常返回。
   3 返回值是int类型,如果返回数据可能是负数,需要用指针取出返回数据,返回值不再返回数据,而是代表是否出错,-1代表出错,0代表成功。
   4 如果不需要考虑是否出错,返回值用void。
  注:以上4种方式只是惯例,不是一定如此。

0 0
原创粉丝点击