28_库的制作与使用

库的制作与使用

介绍

​ 库是一种可执行的二进制文件, 是编译好的代码。 使用库可以提高开发效率。 在 Linux 下有静态库和动态库。 因此编译出来的体积就比较大。
​ 静态库在程序编译的时候会被链接到目标代码里面。 所以程序在运行的时候不再需要静态库了。 因此编译出来的体积就比较大。 以 lib 开头, 以.a 结尾
​ 动态库(动态库也叫共享库) 在程序编译的时候不会被链接到目标代码里面, 而是在程序运行的时候被载入的。 所以程序在运行的时候需要动态库了。 因此编译出来的体积就比较小。 以 lib 开头, 以.so 结尾。

静态库的制作步骤:

​ 1 编写或准备库的源代码
​ 2 将源码.c 文件编译生成.o 文件
​ 3 使用 ar 命令创建静态库
​ 4 测试库文件

实验: 静态库的制作

新建 mylib.c 文件, 编辑内容如下所示:

#include<stdio.h>
void mylib(void);
void mylib(void)
{
	printf("This is mylib\n");
}	

image-20240404185429613

cr是创建和覆盖的意思

lib开头.a结尾

libmylib.a: 库文件名

mylib: 库名

使用这个静态库

test.c

#include<stdio.h>

void mylib();

int main(int argc, char const *argv[])
{
    mylib();
    return 0;
}

image-20240404224758176

-l+去掉lib前缀和.a后缀的库名

-L+该库文件名所在的路径

动态库制作步骤:

​ 1 编写或准备库的源代码
​ 2 将源码.c 文件编译生成.o 文件
​ 3 使用 gcc 命令创建动态库
​ 4 测试库文件
新建 mylib.c 文件, 编辑内容如下所示:

#include<stdio.h>
void mylib(void);
void mylib(void)
{
	printf("This is mylib\n");
}

image-20240404225110035

-fpic: 生成位置无关的代码(产生的代码中,没有绝对地址,全部使用相对地址)

-shared: 生成动态库

test.c

#include <stdio.h>
void mylib(void);
int main(void)
{
	mylib();
	return 0;
}

image-20240404225149360

image-20240404225153648

​ 在动态库使用是, 系统会默认去/lib, /usr/lib 目录下去查找动态函数库, 如果我们使用的库不在里面,
就会提示错误。 解决这个问题有三种方法。

解决方法:

第一种方法:
将生成的动态库拷贝到/lib 或者/usr/lib 里面去, 因为系统会默认去这俩个路径下寻找。
第二种方法:
把我们的动态库所在的路径加到环境变量里面去, 比如我们动态库所在的路径为/home/test, 我们就可以这样添加, 但是这种方法只在当前设置的窗口有效。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/samba/linux/13

我们加入环境后, 运行 a.out,如下图所示:

image-20240404230152099

只对当前命令窗口有效

第三种方法:
修改 ubuntu 下的配置文件/etc/ld.so.conf, 我们在这个配置文件里面加入动态库所在的位置, 然后使用命令 ldconfig 更新目录。
我们输入以下命令编辑/etc/ld.so.conf 文件, 如下图所示:

image-20240404231512852

image-20240404231423291

修改完文件保存退出, 输入 ldconfig 更新目录。 运行测试如下图所示:

image-20240404230313139

posted @ 2024-04-10 19:55  爱吃冰激凌的黄某某  阅读(9)  评论(0编辑  收藏  举报