0


linux 动态链接库(.so)的生成和引用

动态链接库(.so)的生成和引用

一.简介

动态链接库:在Linux系统中,动态链接库(Dynamic Linking Library)是一种在运行时链接的共享库。相比于静态链接库,动态链接库可以在程序运行时加载,而不需要在编译时链接到程序中,这样可以减小可执行程序的大小,也方便了库的管理和更新。

动态链接库有两个主要的扩展名,分别是.so和.dll,其中.so文件是Linux系统下的动态链接库,.dll文件是Windows系统下的动态链接库。Linux系统下,动态链接库通常使用GCC编译器生成,使用-shared选项编译。在程序运行时,动态链接库会被动态地加载到内存中,多个程序可以共享同一个动态链接库,减少了内存占用和磁盘空间的使用。

动态链接库在Linux系统中被广泛使用,许多系统库和第三方库都是动态链接库,例如libc、libpthread、libssl等等。动态链接库的使用可以提高程序的可移植性、可维护性和安全性,是Linux系统下的重要特性之一。

二.动态链接库的生成

在Linux中,可以使用gcc命令将多个目标文件生成一个动态链接库(也称为共享库)。生成动态链接库的步骤如下:

--sodir
    |--so.c
    |--s0.h
    |--libtest.so
    
gcc  so.c -fPIC -shared  -L./sodir -o libtest.so 

-fPIC:生成与位置无关的代码,这是生成动态链接库所必需的。
-shared:告诉链接器生成动态链接库而不是可执行文件.
-L:指定源文件路径,源文件在当前编译路径下不需要。
-o:指定输出文件名.
so.c:参与编译的源文件.
libtest.so:lib为前缀,test为库名,.so为后缀。
注意:库名可以自由取名,但是前缀和后缀必须遵循规范,否则系统无法识别。

三.引用动态链接库

  1. 首先,我们创建一个名为 libhello.c 的源文件,其中包含了一个简单的 hello 函数://libhello.c#include<stdio.h>voidhello(){printf("Hello, world!\n");}
  2. 接着,我们使用 gcc 命令来编译这个源文件,并生成一个名为 libhello.so 的动态链接库:gcc -fPIC -shared -o libhello.so libhello.c
  3. 现在,我们可以在另一个源文件中引用这个动态链接库,例如,我们创建一个名为 main.c 的源文件://main.cvoidhello();intmain(){hello();return0;}
  4. 再编译main.c,生成可执行文件:gcc -o main main.c -L. -lhello-L:指定so文件所在的目录;-l:动态链接库名,去除前缀lib,去除后缀.so;
  5. 最后,执行main:> 保存信息,找不到动态链接库文件。在这里插入图片描述> 解决方法:将动态链接库所在的文件添加到环境变量中:exportLD_LIBRARY_PATH=$(pwd)在这里插入图片描述> 其它解决方式:> 1.临时性的 export 环境变量=$环境变量:你要添加的路径> 2.写入/etc/profile> 3.写入到家目录的.bashrc> 4.写入到/etc/environment中
标签: linux 运维 服务器

本文转载自: https://blog.csdn.net/qq_38393271/article/details/129161064
版权归原作者 进击的铁甲小宝 所有, 如有侵权,请联系我们删除。

“linux 动态链接库(.so)的生成和引用”的评论:

还没有评论