Linux中的动态库(共享库)的制作

一、整体大纲

二、共享库的制作

1. 命名规则:

lib + 名字 + .so

2. 制作步骤:

1) 生成与位置无关的代码 (生成与位置无关的.o)
    2) 将.o打包成共享库(动态库)

3. 发布和使用共享库:

4. 解决程序执行时动态库无法被加载的问题:

1)放到系统的库目录 中 -- 不允许使用

2)临时测试

环境变量: LD_LIBRARY_PATH=将动态库的路径设置给该变量
          将设置的值, 导入到系统环境变量中: export LD_LIBRARY_PATH
          当终端关闭, 设置会失效

3)不常用的方法(永久设置):

在家目录的 .bashrc文件 中添加一句话: export LD_LIBRARY_PATH=动态库目录的绝对路径
           .bashrc修改完成, 需要重启终端

4)修改配置文件

a. 需要找动态连接器的配置文件 --  /etc/ld.so.conf
          b. 动态库的路径写到配置文件中 -- 绝对路径
          c. 更新 -- sudo ldconfig -v

5. 优缺点:

三、动态库的制作示例  

动态库的制作示例请看博客:https://www.cnblogs.com/xuejiale/p/10741311.html

原文地址:https://www.cnblogs.com/xuejiale/p/10788340.html

时间: 2024-10-08 05:06:39

Linux中的动态库(共享库)的制作的相关文章

linux 中使用动态.so库步骤以及注意

在linux工程中添加libtest.so动态库 1.添加该动态库相应的头文件 2.添加动态链接库的路径(可以将动态库放在/usr/lib/下,也可以使用绝对路径) 3.在makefile中添加动态库的链接(-ltest) 注: 上述步骤添加完成后编译如果还出现找不到函数的情况可能是c文件不能在c++被调用,在库的头文件中添加 #ifdef _cplusplus extern "C"{ #endif n个函数描述 #ifdef _cplusplus } #endif

链接(extern、static关键词\头文件\静态库\共享库)

原文链接:http://www.orlion.ga/781/ 一. 多目标文件的链接 假设有两个文件:stack.c: /* stack.c */ char stack[512]; int top = -1; void push(char c) {         stack[++top] = c; } char pop(void) {         return stack[top--]; } int is_empty(void) {         return top == -1; }

Linux中的动态函数库和静态函数库的比较

库函数既提高了代码的利用率,又屏蔽了函数内部实现的细节,给不同开发者提供了统一的接口.从实现来看,库函数可以分为动态函数库和静态函数库.同一组函数,可以根据需要封装成静态库和动态库.那么生成静态库和动态库有什么区别?静态库和动态库对函数的实现上各有些什么要求?两者对内存各有什么影响呢?下面就带着这些问题一起开探讨. 静态库和动态库生成方式的区别为了简化,下面以一个只有一个函数的库的实现来说明.库函数的代码demo.c如下:/************************************

Linux 环境下 动态库(共享库) 共享路径设置

个人博客首页(点击查看详情)   1.简介     动态库 链接 后生成 可执行文件,该可执行文件 需要读取动态库文件,因此 我们需要 告知 计算机 该库文件的位置信息:本文用来 描述 如何设置 动态库文件 位置信息     备注:    系统无法 获取 动态库文件 会提示 " error while loading shared libraries: libxxx.so: cannot open shared object file: Error 40"      2.全局变量 设置

Linux中挂载Windows里共享目录

将Windows里的F:\sadoc文件夹右键点击设置为共享目录,共享用户为administrator # yum -y install cifs-utils    #安装mount.cifs软件包 # mkdir /windows         #创建挂载目录windows # mount.cifs //10.0.0.1/sadoc /windows/ -o user=administrator,pass=linux  #pass=linux为Windows里administrator用户的

linux中NFS网络文件系统共享

1.NFS:NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样.优点:1.节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用2.用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络

linux中LVM动态扩容和管理

相关概念 pv:物理卷 pe:物理拓展卷     lvm的最小存储单元 vg :卷组 lvm :最终使用的可伸缩设备 2.  lvm 建立 1).划分物理分区,修改其标签为lvm 通过L 查出8e编号符合要求 修改成功 (2)pvcreate   /dev/vdb1                                                ---创建物理卷 watch -n 1   'pvs;echo=======;vgs;echo=======;lvs;echo======

Linux共享库.so文件的命名和动态链接

Linux中的.so文件 是动态链接的产物 共享库理解为提供各种功能函数的集合,对外提供标准的接口 Linux中命名系统中共享库的规则 主版本号:不同的版本号之间不兼容 次版本号:增量升级 向后兼容 发行版本号:对应次版本的错误修正和性能提升,不影响兼容性 Linux中的共享库并不都是这样的格式 比如GLibc的共享库命名为:libc-x.y.z.so 动态链接器也是GLibc的一部分,使用ld-x.y.z.so命名 libm(数学库)等 SO-NAME机制 系统和程序中要链接的共享库的格式一般

Linux 共享库(动态库)

Linux 系统上有两类根本不同的 Linux 可执行程序.第一类是静态链接的可执行程序.静态可执行程序包含执行所需的所有函数 - 换句话说,它们是"完整的".因为这一原因,静态可执行程序不依赖任何外部库就可以运行. 第二类是动态链接的可执行程序. 静态可执行程序与动态可执行程序比较 我们可以用 ldd 命令来确定某一特定可执行程序是否为静态链接的: # ldd /sbin/sln not a dynamic executable "not a dynamic executa