Linux 下静态库.a 与.so 库文件的生成与使用


一、准备工作

先创建程序,方便以后使用
可直接复制利用

先创建一个作业目录,保存本次练习的文件。
#mkdir test2
#cd test2
然后用 vim、nano 或 gedit 等文本编辑器编辑生成所需要的四个文件 A1.c 、 A2.c、 A.h、
test.c 。
A1.c:
#include <stdio.h>
void print1(int arg){
printf("A1 print arg:%d\n",arg);
}
A2.c:
#include <stdio.h>
void print2(char *arg){
printf("A2 printf arg:%s\n", arg);
}
A.h
#ifndef A_H
#define A_H
void print1(int);
void print2(char *);
#endif
test.c:
#include <stdlib.h>
#include "A.h"
int main(){
print1(1);
print2("test");
exit(0);
}
yan@yan-virtual-machine:~/作业3/问题1.1$ mkdir test2
yan@yan-virtual-machine:~/作业3/问题1.1$ cd test2
yan@yan-virtual-machine:~/作业3/问题1.1/test2$ vim A1.c
yan@yan-virtual-machine:~/作业3/问题1.1/test2$ vim A2,c
yan@yan-virtual-machine:~/作业3/问题1.1/test2$ vim A2.c
yan@yan-virtual-machine:~/作业3/问题1.1/test2$ vim A1.c
yan@yan-virtual-machine:~/作业3/问题1.1/test2$ vim A2.c
yan@yan-virtual-machine:~/作业3/问题1.1/test2$ vim A.h
yan@yan-virtual-machine:~/作业3/问题1.1/test2$ vim test.c

在这里插入图片描述

二、静态库.a 文件的生成与使用。

1.生成目标文件(xxx.o)

代码如下(示例):

 gcc -c A1.c A2.c

会在该目录下生成A1.o和A2.o文件

2.生成静态库.a 文件

代码如下(示例):

yan@yan-virtual-machine:~/作业3/问题1.1/test2$ ar crv libafile.a A1.o A2.o
a - A1.o
a - A2.o

这个也会在该目录下生成一个libafile.a文件。

3.使用.a 库文件,创建可执行程序(若采用此种方式,需保证生成的.a 文件与.c 文件保存在同一目录下,即都在当前目录下)

代码如下(示例):

yan@yan-virtual-machine:~/作业3/问题1.1/test2$ vim test.c
yan@yan-virtual-machine:~/作业3/问题1.1/test2$ gcc -o test test.c libafile.a
yan@yan-virtual-machine:~/作业3/问题1.1/test2$ ./test
A1 print arg:1
A2 printf arg:test

三、共享库.so 文件的生成与使用

1.生成目标文件(xxx.o)

代码如下(示例):

gcc -c -fpic A1.c A2.c

2.生成共享库.so 文件

代码如下(示例):

gcc -shared *.o -o libsofile.so

3.使用.so 库文件,创建可执行程序

代码如下(示例):

yan@yan-virtual-machine:~/作业3/问题1.1/test2$ gcc -o test test.c libsofile.so
yan@yan-virtual-machine:~/作业3/问题1.1/test2$ ./test
./test: error while loading shared libraries: libsofile.so: cannot open shared object file: No such file or directory

在这里出现了错误,经过查阅资料了解到,这是linux自身原因,即其只在/lib and /usr/lib 下搜索对应的.so 文件,故需将对应 so 文件拷贝到对应路径。
然后就可以了
代码如下(示例):

yan@yan-virtual-machine:~/作业3/问题1.1/test2$ sudo cp libsofile.so /usr/lib
yan@yan-virtual-machine:~/作业3/问题1.1/test2$ ./test
A1 print arg:1
A2 printf arg:test

总结

通过本次学习了解到了和学习到了静态库.a和.so库文件的生成与使用,这使我对库文件有了更深刻的理解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值