动态库制作和使用简介-转载

本文介绍了在Linux环境下如何制作和使用动态链接库。通过-fPIC选项生成位置无关码,-shared选项创建.so文件。在使用动态库时,需确保库文件位于系统搜索路径或通过LD_LIBRARY_PATH环境变量指定。动态库的优势在于节省内存,便于多个应用共享。
摘要由CSDN通过智能技术生成

动态库制作和使用简介

程序使用动态库。在编译和执行的时候都要指定动态库的位置。

    在Linux中制作动态链接库只需要使用好GCC这两个编译选项即可搞定,下面小哥画了一张图简单的说明了下:

图片

过程简要说明:

图片

    其实链接库的生成过程也可以先分别生成位置无关的目标文件.o文件,然后再创建生成最终的.so动态链接文件。不过gcc可以直接使用这两个编译选项一次性生成。

2动态链接库制作过程

01

准备源文件

    这里小哥还是使用昨天的两个module作为例子来讲解动态链接过程,这里就不板书了,可以到上一节静态链接中查看源文件。

02

编译生成动态链接库

图片

    这里通过-fPIC和-shared两个选项即可把所有的.c文件生成libxxx.so文件。那下面看一下这两个选项是什么意思:

>>>>

-fPIC选项

    PIC - Position Independent Code,意思是位置无关码,即加载器把其加载到内存任何位置,其代码均可以正常运行,所以代码中都是使用的是相对地址,这样的特点也就非常满足动态库加载位置变化的特性。

    同时这样的特点也让动态库被多个应用程序连接的时候不需要copy形成多个副本,大大节省内存。

>>>>

-shared选项

   该选项主要是GCC把目标文件链接成为一个共享库。

03

使用库文件编译

图片

    这里使用共享库来生成可执行文件的用法和前面的静态链接库是类似的,-lxxx(其中的xxx即.so文件去掉lib和后缀的名称),-L.即表示在当前文件中链接共享库。

04

动态库的使用

    

    如果直接运行可执行文件Test,系统会提示无法打开共享文件,那一般都是由于共享库没有在系统加载器所在指定的路径中。

   一般加载器都会默认在"/lib"、"/usr/lib"后者LD_LIBRARY_PATH环境变量指定的路径中搜索动态库,所以如果把.so文件复制到前面两个目录便可执行,不过为了不破坏系统文件,一般都会使用环境变量定义路径。

图片


   上面小哥直接使用export设置了环境变量定义为了当前路径,通过"echo $xxx"便可以查看所设置的路径,当然你也可以使用unset来删除环境变量,然后再次运行程序即可获得跟上次静态链接库一样的结果了。

    当然这里采用了最直接的环境变量设置方法,一般系统注销,该环境变量就会消失,后面小哥会再整理一下环境变量的设置包括如何长久保留环境变量等,比如在用户主目录下的.profile或.bashrc文件配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值