• linux系统环境下的静态库和动态库的制作


      linux系统下的应用编程需要系统提供的库文件,包括静态库或动态库。不管是静态库还是动态库,都是编译好的二进制文件。在我们编译程序时要链接的目标文件,静态库是链接的时候直接编译到程序里,和程序成为一体,因此程序代码的体积较大,而动态库链接之后,库文件和程序不为一体,只有在代码运行时才会找相应的库文件进行链接,故而代码体积小,运行速度更快。

      接下来我就将linux系统下的静态库和动态库的制作过程,做个简单的介绍。

      一、静态库的制作

      1.如下图所示,编写示例工程代码dayin.c 、dayin.h、test.c

    其中dayin.c文件为要封装的静态库源码,dayin.h文件存放功能函数的申明,test.c是要验证静态库功能的源码文件

      2.编译功能源码文件,生成dayin.o目标文件:gcc -c dayin.c    

      3.执行命令生成静态库文件:ar crs libdayin.a dayin.o

      4.编译生成测试程序test:gcc -o test test.c -L. -ldayin  (-L.为指定静态库的路径,.为当前目录下)

      5.删除静态库文件之后,能够再此正常运行

      二、动态库制作过程

      1.编写制作动态库的示例工程代码shuru.c shuchu.c head.h main.c

      

      2.编译功能模块shuru.c和shuchu.c生成与路径无关的目标文件:gcc -c -fPIC shuru.c shuchu.c

      3.生成动态库文件:gcc -shared -o libdongtai.so.1 shuru.o shuchu.o

      4.创建动态库的软连接:ln -s libdongtai.so.1 libdongtai.so 

      5.编译测试程序:gcc -o main main.c -L. -ldongtai

      6.运行可执行性文件时,会报错误,因为没有添加环境变量,下面有三种解决方案。

      错误信息:./main: error while loading shared libraries: libdongtai.so: cannot open shared object file: No such file or directory

      1)添加临时的环境变量,只在当前终端有效:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

      2)把生成的动态库文件和软连接拷贝到/usr/lib下或/lib下,不过一般不建议这种操作,因为两个目录下一般为系统的库文件所在的路径。

      3)添加配置文件:在/etc/ld.so.conf.d/下添加my.conf文件,加入库所在的路径:/home/lolors/test/library1/

        添加完毕后,刷新:ldconfig即可。

  • 相关阅读:
    25-网易新闻iOS版使用的开源组件
    03-Xcode 6 插件失效的临时解决方案
    01-CEO才是天花板
    01-微信6.2
    01-创业视频
    03-http2翻译在线文档
    02-iOS核心动画-第一课——ViewAnimations
    24-Xcode快捷键
    02-IOS项目开发代码规范标准
    03-iOS Socket用法
  • 原文地址:https://www.cnblogs.com/lolors/p/9033293.html
Copyright © 2020-2023  润新知