Linux——动静态库

基础知识:动vs静

类型
加载时机 运行时 编译时
可复用性 多个文件只需要加载一份库文件 每个文件都需要加载一份文件
性能 链接次数越多越有优势 链接次数越少越有优势

代码编写

静态库

生成静态库
Bash 复制代码
libmath.a:add.o sub.o
	ar -rc $@ $^

%.o:%.c
	gcc -c $<
使用静态库
头文件和工作目录同目录
  1. 头文件,库文件放到文件需要使用的目录下
cpp 复制代码
#include<stdio.h>
#include"add.h"
#include"sub.h"

int main()
{
    printf("%d\n",add(1,2));
    printf("%d\n",sub(1,2));
    return 0;
}

头文件放到工作目录下

  1. 指明库文件的位置
头文件和工作目录不同目录

只要能指明头文件路径就可以使用

cpp 复制代码
#include<stdio.h>
#include"dy/add.h"
#include"dy/sub.h"

int main()
{
    printf("%d\n",add(1,2));
    printf("%d\n",sub(1,2));
    return 0;
}

动态库

生成动态库
bash 复制代码
libmath.so:add.o sub.o
	gcc -shared -o $@ $^

%.o:%.c
	# gcc -c $^ -o $@
	gcc -fPIC -c $<

fPIC 与位置无关码

使用动态库
  1. 头文件,库文件放到文件需要使用的目录下
  2. 生成可执行文件

    原因解释

-I(大写i)------如果头文件不在目录下,会报错;这个命令告诉编译器头文件位置

-L------库文件位置

-l(小写L)------库文件名称

直接写明是告诉编译器怎么做,在运行的时候是告诉系统库文件的位置------需要在系统上设置库文件的位置


指明库文件位置的方法
  1. 直接将头文件+库文件添加进系统目录

头文件 ------ /usr/include/
库文件 ------ /lib64

  1. 系统目录下添加软链接

ln -s 目标库文件 新增软连接

  1. 修改LD_LIBRARY_PATH变量

unset 删除变量内容------ unset PATH

使用 : 将地址进行分割
export 设置环境变量------ export PATH=...

  1. /etc/ld.so.conf.d/目录下创建文件 ------永久有效

使用ldconfig进行刷新,必要时使用sudo


参考文件

动静态库性能

相关推荐
星源~4 小时前
zephyr-Linux环境下搭建步骤
linux·mcu·嵌入式开发·zephyr
Huangjin007_4 小时前
【Linux 系统篇(二十)】进程(八):进程创建、进程退出
linux·运维·服务器
吴声子夜歌5 小时前
Shell编程——开发规范
linux·运维·shell
Shadow(⊙o⊙)5 小时前
epoll三大接口到内核+正确认识应用层与内核的联系(6000字)
linux·服务器·网络
皓月盈江5 小时前
Linux系统使用VSCode搭建GO开发环境
linux·vscode·ubuntu·golang·debian
CHHH_HHH5 小时前
【Linux系统篇】进程间通信揭秘:从管道到共享内存
linux·服务器·c语言·开发语言·后端·ubuntu
.冰块.5 小时前
华为云计算服务学习笔记|ECS + 镜像 IMS + 弹性伸缩 AS 完整踩坑实录
linux·华为云·ims·as·ecs·弹性云服务器·计算类云服务
一技安身14 小时前
【信创】银河麒麟V10、统信UOS解压7Z文件
linux·运维·服务器
奔跑的架构师15 小时前
[A-50]ARMv9/v8-DVFS系统架构
linux·arm开发·架构·系统架构·arm
迷途呀15 小时前
CI/CD 自动化部署实践:让代码提交后自动上线
linux·运维·nginx·ci/cd·自动化