Linux中用Makefile管理静态库与动态库

Linux中用Makefile管理静态库与动态库

本人是程序员小白一枚,还望大家多多批评指点

  1. 先介绍一下静态库

程序在编译链接时将哭的代码链接到可行文件中。
程序运行不再需要静态库。

前情提要:静态库的缺点就是占内存,因为静态库的文件会变大,即因为整个函数库的所有数据都会被整合进目标代码中。当然也存在优点编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。

vim add.h
//文件名 add.h
#pragam once/*这里是调用一次,可以减少整个编译过程中打开这个文件的次数.*/
int add(int a,int b);
//有了头文件 
//下面我们来写一下相关的函数
#include "add.h"
int add(int a,int b)
{
	return a + b;
}

下面我们再多写一个,不知为啥对于加减这么兴趣

vim sub.h
//惯例头文件
#pragam once
int sub(int a,int b);
//一些基础操作不过多赘述
vim sub.c 
/*-----------*/
#include "sub.h"
int sub(int a,int b){
        return a - b;
}

下面来写一下main函数

#include <stdio.h>
#include "add.h"
#include "sub.h"

int main(){
        int a = 999;
        int b = 1;
        printf("a + b = %d\n",add(a,b));
        printf("a - b = %d\n",sub(a,b));
}

下面是重点!!!!!

Makefile文件内容与下:

main:main.c lib.a
        gcc main.c ./lib.a -o main
lib.a:
        gcc -c add.c -o add.o
        gcc -c sub.c -o sub.o
        ar -rc lib.a add.o sub.o
.PHONY:clean
clean:
        rm main lib.a add.o sub.o  

目的:将其合成一个静态链接库 lib.a

运行一下,如图:
在这里插入图片描述
2.动态库(.so):
程序在运行时才去链接动态库的代码,多个程序共享使用库的代码。

动态链接:
在可执行文件开始运行前,外部函数的机器码由操作系统从磁盘的动态库中复制到内存中。

优点: 多个程序间共享,可执行文件更小,节省内存空间

这里只需要改动Makefile文件即可:

//直接偷个懒反正没人看,嘻嘻~
main:main.c lib-2018214272.so
        gcc main.c ./lib-2018214272.so -o main
lib-2018214272.so:
        gcc -fPIC -c add-2018214272.c sub-2018214272.c
        gcc -shared -o lib-2018214272.so *.o
.PHONY:clean
clean:
        rm main lib-2018214272.so 

/*相关说明:
Shared 表示生成共享库
-fPIC:产生位置无关码
*.o : 表示当前所有.o文件
*/

运行结果:
在这里插入图片描述

新人第一次写博客,还请大家多多留言,批评指正~

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值