目录

一 .什么是库

二.静态库

2.1静态库的生成:

2.2静态库的编译(一图解决)

2.2.1 假设我们的 头文件 和 libxxx.a(静态库文件)在同一个目录下。

2.2.2 假设我们的 头文件 和 libxxx.a(静态库文件)不在同一个目录下。

三.动态库

3.1动态库的生成:

3.2 动态库的编译

3.2.1 解决方法:


一 .什么是库

库是预先编写好的、用于实现特定功能的一组代码集合。这些库可以被多个程序共享使用,以减少重复代码的编写和提高代码的复用性。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。就是把.o文件编译到一起。库有两种:

静态库. a[Linux]、.lib[windows]
动态库. so[Linux]、.dll[windows]


二.静态库

静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中,程序运行的时候将不再
需要静态库。

我们先写我们的代码例子

#include<stdio.h>
#include"mymath.h"
#include"mystring.h"
int main()
{
    int a = 10;
    int b = 20;
    char* str = "hello linux";
    int c = add(a,b);
    int d = subtract(a,b);
    int sz = mystrlen(str);
    printf("add:%d,sub:%d,sz:%d\n",c,d,sz);
    return 0;
}

2.1静态库的生成:

ar -rc  libxxx.a  xxx1.o  xxx2.o

例子:

生成结果:


2.2静态库的编译(一图解决)

gcc -o  main  main.c  -I头文件路径  -L库文件路径  -l xxx

如图所示:

2.2.1 假设我们的 头文件 和 libxxx.a(静态库文件)在同一个目录下。

gcc -o main main.c  -L.  -l myc


2.2.2 假设我们的 头文件 和 libxxx.a(静态库文件)不在同一个目录下。

gcc -o main main.c  -I./lib/myinclude  -L./lib/mylib -l myc


三.动态库

动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。
一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目
标文件的整个机器码。

3.1动态库的生成:

gcc -o libxxx.so xxx.o xxx.o -shared


3.2 动态库的编译(不在系统共享库路径不能运行但能生成

 使用  gcc -o  main  main.c  -I头文件路径  -L库文件路径  -l xxx 可以生成文件但不可以运行。

不可以运行

3.2.1 解决方法:

1. 拷贝.so文件到系统共享库路径下,一般指/usr/lib、/usr/local/lib、/lib64等
2. 向系统共享库路径下建立同名软连接
3. 更改环境变量:LD_LIBRARY_PATH
4. ldconfig方案:配置/etc/ld.so.conf.d/,ldconfig更新

补充:ln生成符号链接文件,指的是通过 ln -s 命令生成软链接文件

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐