0
点赞
收藏
分享

微信扫一扫

动静态库--Linux

_鱼与渔_ 2022-04-16 阅读 63
linux

动态链接与静态链接的解释

通过命令ldd+可执行文件名,可以查看可执行文件中调用的库

 

库文件名和引入库的名称

如:libc.so-> c库,去掉前缀lib,去掉后缀.so或.a。

动态链接与静态链接的工作原理

动态链接

 

静态链接

 

静态库与动态库

实例:

//myadd.h
#ifndef __MYADD_H__
#define __MYADD_H__
int add(int a,int b);
#endif
​
//myadd.c
#include"myadd.h"
int add(int a,int b)
{
    return a+b;
}
​
//mysub.h
#ifndef __MYSUB_H__
#define __MYSUB_H__
int sub(int a, int b);
#endif
​
//mysub.c
#include"mysub.h"
int sub(int a,int b)
{
    return a-b;
}
​
//main.c
#include<stdio.h>
#include"myadd.h"
#include"mysub.h"
int main()
{
    int a=10;
    int b=20;
    printf("add(a,b)=%d\n",add(a,b));
    
    printf("sub(a,b)=%d\n",sub(a,b));
}

生成静态库

将add.c、sub.c生成add.o和sub.o,然后进行打包生成静态库

将头文件和生成的静态库分别放在mylib目录下的include目录和lib目录下

生成静态库的语法格式

ar -rc 生成的静态库名称,想要打包的.o文件

libmymath.a就是打包好的静态库

使用Makefile打包静态库

使用静态库

Makefile中使用

生成动态库

使用动态库

编译选项

与静态库相同,只是少了-static选项

执行:执行报错

执行ldd命令查看可执行文件所需要的库,可以发现我们自己打包的动态库并没有被找到,因为我们是按动态链接来编译的,编译器知道我们的库在哪,但是操作系统不知道。

所以我们要引入一个人环境变量LD_LIBRARY_PATH,里面放着动态库的路径,我们要把自己的库的路径放进去。

于是,要执行命令 export LD_LIBRARY_PATH=./mylib/lib/

这时就可以正常执行了

Makefile使用动态库

举报

相关推荐

0 条评论