在Linux下打包动静态库

需求:主体函数已经写好,需要一个mymath的包让我的程序执行起来
创建myadd.c mysub.c myadd.h mysub.h在mylib目录下

myadd.h

#pragma once 
int myadd(int a,int b);

myadd.c

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

mysub.h

#pragma once
int myadd(int a,int b);

mysub.c

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

main.c创建在otherPerson目录下

#include<stdio.h>
#include"mysub.h"
#include"myadd.h"
int main(){
  int a=100;
  int b=30;
  printf("%d+%d=%d\n",a,b,myadd(a,b));
  printf("%d+%d=%d\n",a,b,mysub(a,b));
  return 0;
}

如何创建静态链接呢?(.a文件)

1、首先要将myadd.c mysub.c形成二进制的链接文件

gcc -o myadd.c
gcc -o mysub.c

2、在mylib文件下进行静态包打包

ar -rc libmymath.a *.o 
//-r指的是文件中如果是更新的文件,进行替换,如果不是进行创建
//-c指的是创建
//libmymath.a其实形成的包是mymath,Linux有规定,去掉头尾
	

3、将.h文件和形成的.a包给别人
4、让编译器找到头文件和库文件

 gcc -o mytest main.c -I./include -L./lib -lmymath
//-I是告诉编译器头文件的位置 include
//-L是link的意思,告诉编译器库文件的位置
//-l也是link的意思,但是是告诉编译去连哪个库,要显示的告诉gcc用哪个库

在这里插入图片描述

如何创建动态链接呢?(.so文件)

1、编译myadd.c mysub.c,会形成对应的.o文件

gcc -fPIC -c myadd.c
gcc -fPIC -c mysub.c
// -fPIC形成与位置无关码
//-c形成二进制文件

2、用gcc继续打包

gcc -shared -o libmymath.so *.o
//-shared共享

3、编译文件

gcc -omytest main.c -I./include -Llib -lmymath

4、让os找到动态库

//ldd lddmytest查看math依靠的路径
a 添加环境变量(这个是临时方案,一旦重新打开xshell就没了)
   lddmytest
   echo $LD_LIBRARY_PATH//查看这个环境
   export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/gtt/alldir/20230815/otherperson/lib//查看环境
b 添加软连接
 sudo ln -s /home/gtt/alldir/20230815/mylib/lib/libmymath.so /lib64/libmymath.so
  //在系统lib64下建立软连接指向我当前的路径
c 配置文件方案
	ls /etc/ld.so.conf.d///查看动态库的配置文件 ld动态库。so动态库的后缀,conf配置文件
	sudo touch /etc/ld.so.conf.d/gtt.conf//创建自己的配置文件
	在gtt.conf中添加动态库的地址 ,不用写到库中  /home/gtt/alldir/20230815/mylib/lib
	sudo ldconfig//让系统配置文件生效
	

  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值