• 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即可。

  • 相关阅读:
    Win7 SP1 安装SQL Server 2012时提示“此计算机上的操作系统不符合 SQL Server 2012的最低要求”
    ajax jsonp跨域
    Caused by: Unable to locate parent package [json-package] for [class com.you.action.ColumnAction]
    PHP MVC自己主动RBAC自己主动生成的访问路由
    Service与Activity与交流AIDL
    SVN常见错误两项纪录
    EL表达式语言
    oracle11g ASM(修复损坏的磁盘组头asm修复2)
    如何使用iOS 8 指纹识别,代码、示例
    EXCEL Pivot table manipulate
  • 原文地址:https://www.cnblogs.com/lolors/p/9033293.html
Copyright © 2020-2023  润新知