动态库和静态库的后缀(动态库文件和静态库文件)

动态库和静态库的后缀(动态库文件和静态库文件)svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。



 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p></p> 

讯享网

一个库主要包含一批头文件和一个或多个源文件。头文件包含函数声明,源文件包含函数实现。

动态库: 在Linux下是后缀为.so文件,在Windows下是后缀为.dll文件。多个程序可以共享使用动态库代码。

静态库: 在Linux下是后缀为.a的文件,在Windows下是后缀为.lib的文件。

动态链接: 在可执行程序运行前,操作系统将使用到动态库的机器码从硬盘加载到内存中。

静态链接: 可执行程序编译链接时,将代码使用到的静态库的代码拷贝到可执行程序中。静态链接的本质是将使用到的代码链接。

静态链接和动态链接的优缺点

静态链接: 可执行程序文件体积大,但是不依赖库,可移植性强。
动态链接: 库执行程序文件体积小,但是依赖库,如果库被删除,该程序也无法使用。

第一步 编写源代码文件和头文件
写一个静态库需要头文件和能生成目标文件的文件。

编写你的库函数的源代码文件(例如 add.c)和相应的头文件(例如 add.h)。

add.h

讯享网

add.c

 

第二步 生成目标文件

使用编译器将源代码文件编译成目标文件(.o 文件)。

讯享网

第三步 打包生成静态库

使用 ar 工具将目标文件打包成静态库。

 

ar: GNU归档工具。
rc: 选项用于替换(replace)和创建(create)归档文件,并生成索引(symbol table)。
libmymath.a: 静态库文件名。
此步骤将生成名为 libmymath.a 的静态库。

讯享网
  1. 定义静态库: 第一行指定静态库名称为libadd.a。
  2. 构建规则: 第3行定义构建规则,表明静态库依赖于myadd.o,第4行实际构建静态库的命令。
  3. 编译规则: 第5-6行定义了编译myadd.o的规则,依赖于add.c,使用gcc编译。
  4. 清理规则: 第8-10行定义了清理规则,用于删除生成的目标文件和静态库。
  5. 输出目录规则: 第12-17行定义了输出目录结构的规则,包括创建目录和复制文件

1. 编写一个使用静态库的程序 main_static.c


讯享网

 

2. 编译使用静态库的程序
使用 gcc 编译程序并链接静态库。

讯享网

-I https://blog.csdn.net/yualian/article/details/lib/include/: 告诉编译器在 https://blog.csdn.net/yualian/article/details/lib/include/ 目录下查找头文件。
-L https://blog.csdn.net/yualian/article/details/lib/myaddlib/: 告诉编译器在 https://blog.csdn.net/yualian/article/details/lib/myaddlib/ 目录下查找库文件。
-ladd: 指定链接时使用的库名,编译器会在指定的库目录中找到 libadd.a。

可以使用软连接方式把头文件库文件添加在默认搜索路径上
(/usr/include、/usr/lib64)。
添加后直接使用运行指令

 

第一步 生成目标文件
使用 -fPIC 选项生成位置独立的目标文件

讯享网

-fPIC: 生成位置独立的代码。

第二步 生成动态库
使用 -shared 选项生成动态库。

 

-shared: 生成动态共享库。
libmymath.so: 动态库文件名。

第三步 生成动态库

使用 -shared 选项生成动态库。

讯享网

-shared: 生成动态共享库。

1. 编写一个使用动态库的程序 main_static.c

 

2. 加载动态库

方法1: 拷贝到系统默认的库路径
首先,我们需要将自定义库文件拷贝到系统默认的库路径中。假设你的库文件位于 /home/my/libadd.so

讯享网

这将把你的库文件复制到 /usr/lib64/ 目录下。
方法2: 在系统默认库路径下建立软链接
创建一个软链接,将库文件链接到 /lib64/ 目录中。

 

这将在 /lib64/ 目录下创建一个名为 libadd.so 的软链接。

方法3: 将库路径添加到LD_LIBRARY_PATH
将自定义库的路径添加到系统环境变量 LD_LIBRARY_PATH 中。

讯享网

你也可以将上述命令添加到你的 shell 配置文件中(例如 ~/.bashrc 或 ~/.zshrc),以便每次打开终端时都自动设置。

方法4: 配置 /etc/ld.so.conf.d/
创建一个配置文件,告诉系统在哪里查找动态库。

 

在文件中添加你库文件所在的路径,例如:

讯享网
 

这将更新系统动态链接器的运行时链接库缓存。

现在,你的自定义库应该能够在系统中被正确找到和使用了。你可以编译和运行程序而无需手动指定库文件的路径。

小讯
上一篇 2025-05-26 19:08
下一篇 2025-05-07 09:16

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/176798.html