【Linux】动静态库、文件的三个时间

1.文件的三个时间

  1. Access: 访问时间,访问的频率很高,所以较新的Linux都是按一定的时间间隔刷新

  1. Modify: 修改文件内容时间

  1. Change:修改文件属性时间,修改文件内容也会修改文件属性

makefile自动编译判断文件是否为最新:就是按可执行程序和源代码文件的modify时间来判断的

2.动静态库

2.1.动静态库基础概念

在Linux中动态库的后缀.so,静态库的后缀.a;

file指令:查看可执行程序是动态还是静态链接

ldd指令:列出与动态库的依赖关系:list dynamic dependencies

2.2制作静态库

原理:把定义编译为可被链接的.o文件,再把这些文件打包在一起,当展开头文件被调用,再与对应的.o文件链接;

myadd.h

#pragma once
#include<stdio.h>
int Add(int a,int b);

myadd.c

#include"myadd.h"
int Add(int a,int b)
{
    return a+b;
}

mysub.h

#pragma once
#include<stdio.h>
int Sub(int a,int b);

mysub.c

#include"mysub.h"
int Sub(int a,int b)
{
    return a-b;
}

makefile

libmymath.a:mysub.o myadd.o//把.0文件使用ar -rc打包在一起
    ar -rc $@ $^
%.o:%.c//把所有的.c文件编译为.o
    gcc -c $<
.PHONY:clean
clean:
    rm -rf *.o libmymath.a  output
.PHONY:output//把头文件和库都放在一个目录下
output:
    mkdir output
    cp *.h output
    cp libmymath.a output

2.2.1.如何使用制作的库呢?

写一段代码

#include"mysub.h"
#include"myadd.h"
int main()
{
    int r1=Sub(5,1);
    int r2=Add(5,1);
    printf("r1=%d,r2=%d\n",r1,r2);
    return 0;
}

这样生成可执行程序

2.3动态库的制作和使用

代码使用和静态库一样的代码

makefile

  1. 制作动态库使用 gcc -shared -o $@ $^

  1. 编译为.o文件要加一个fPIC

libmymath.so:mysub.o myadd.o//制作动态库使用 gcc -shared -o $@ $^
    gcc -shared -o $@ $^
%.o:%.c//编译为.o文件要加一个fPIC
    gcc -fPIC -c $<
.PHONY:clean
clean:
    rm -rf *.o libmymath.so  output_dynamic
.PHONY:output
output:
    mkdir output_dynamic
    cp *.h output_dynamic
    cp libmymath.so output_dynamic

编译可执行程序还是一样

gcc test.c -I./output_dynamic -L./output_dynamic -lmymath -o test

但是不能执行

解决方法:LD_LIBRARY_PATH环境变量是加载器查找库的路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值