嵌入式作业五(Linux中静态库.a与.so库文件的生成与使用)

文章目录

一、用gcc生成静态库和动态库

1、准备工作

​编辑

2、.o文件生成

3、由.o文件创建静态库

4、使用静态库

5、由.o文件创建动态库

6、使用动态库

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

1、创建作业文档

2、编写c程序

3、.a文件生成与使用

4、.so库文件生成与使用

三、使用实例

一、用gcc生成静态库和动态库

1、准备工作

创建本次作业文档

mkdir test1
cd test1

 编写c程序

first:hello.h

second:hello.c

three:main.c

 

2、.o文件生成

gcc -c hello.c

 

3、由.o文件创建静态库

ar -crv libmyhello.a hello.o

 

4、使用静态库

gcc -c main.c
gcc -o hello main.o libmyhello.a

 

 

5、由.o文件创建动态库

gcc -shared -fPIC -o libmyhello.so hello.o

 

6、使用动态库

gcc -o hello main.c -L. -lmyhello

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

1、创建作业文档

mkdir test2
cd test2

2、编写c程序

3、.a文件生成与使用

(1).a文件生成

ar crv libafile.a A1.o A2.o

 

 (2)使用.a文件,创建可执行文件

gcc -o test test.c libafile.a
./test

 

4、.so库文件生成与使用

(1).o文件生成

gcc -c -fpic A1.c A2.c

 

(2).so文件生成

gcc -shared *.o -o libsofile.so

(3)使用.so文件,创建可执行文件

gcc -o test test.c libsofile.so
./test

出现错误:

运行ldd test:

 

 发现确实是找不到对应的.so文件。
这是由于linux自身系统设定的相应的设置的原因,即其只在/lib and /usr/lib下搜索对应的.so文件,故需将对应so文件拷贝到对应路径。

sudo cp libsofile.so /uer/lib

./test

 

三、使用实例

在第一次作业的程序代码基础进行改编,除了x2x函数之外,再扩展写一个x2y函数(功能自定),main函数代码将调用x2x和x2y ;

 

 

将这3个函数分别写成单独的3个 .c文件,并用gcc分别编译为3个.o 目标文件;

gcc -c sub1.c sub2.c main1.c

将x2x、x2y目标文件用 ar工具生成1个 .a 静态库文件,

ar crv subfile.a sub1.o sub2.o

然后用 gcc将 main函数的目标文件与此静态库文件进行链接,生成最终的可执行程序,记录文件的大小。

gcc -o main1 main1.c subfile.a

将x2x、x2y目标文件用 ar工具生成1个 .so 动态库文件,然后用 gcc将 main函数的目标文件与此动态库文件进行链接,生成最终的可执行程序,记录文件的大小,并与之前做对比。

gcc -c -fpic sub1.c sub2.c
gcc -o main1 main1.c subsofile.so
./main1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值