Linux之动态库

 

 

 

  

命令规则

  lib + 名字 + .so

制作步骤

  1)生成与位置无关的代码(生成与位置无关的代码)

  2)将.o打包成共享库(动态库)

发布和使用共享库

 

动态库运行原理:

生成动态库:

  gcc -fPIC -c *.c -I ./include

打包动态库并移动

使用动态库:

复制代码
/***
main.c
***/

#include<stdio.h>
#include"MyCalc.h"

int main()
{
    int a = 10;
    int b = 20;
    int result = a + b;
    printf("a + b = %d\n",result);
    return 0;
}
复制代码

ubuntu1604@ubuntu:~/wangqinghe/C/sharelib$ gedit main.c

ubuntu1604@ubuntu:~/wangqinghe/C/sharelib$ gcc main.c -Iinclude -L ./lib/ -lMyCalc -o myapp

ubuntu1604@ubuntu:~/wangqinghe/C/sharelib$ ls

app  include  lib  main.c  myapp  src

ubuntu1604@ubuntu:~/wangqinghe/C/sharelib$ ./myapp

a + b = 30

 

ldd 命令:查看程序执行时依赖的所有的库

ubuntu1604@ubuntu:~/wangqinghe/C/sharelib$ ldd myapp

       linux-vdso.so.1 =>  (0x00007fffe8d13000)

       libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f92ffac7000)

       /lib64/ld-linux-x86-64.so.2 (0x00007f92ffe91000)

 

设置动态库环境变量(临时)

export LD_LIBRARY_PATH=./lib

永久生效:

bansh.rc

将export LD_LIBRARY_PATH=./lib(绝对路径)

 

解决动态库无法加载

  1. 需要找到动态链接器的配置文件
  2. 动态库的路径写到配置文件中
  3. 更新  sudo idconfig -v

 

cd etc

ls -l ld.so.conf

vi ld.so.conf

(o 在当前行下行创建一行)

将动态库路径写到该配置文件中(绝对路径)

sudo idconfig -v

动态库的优点:

  1. 执行程序体积小
  2. 动态库更新方便(接口没变)

 

缺点:

  1. 发布程序时,需要将动态库发布给用户
  2. 加载速度较静态库较慢
posted @   王清河  阅读(449)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示