Ubuntu环境下理解和使用gcc生成静态库和动态库

步骤一:编译子程序hello.h    hello.c    main.c

 

首先创建一个文件夹zy1(作业1)

cd进入作业1后使用vim编写源代码

03a5c2e9d94c409898c1e89eccb053ad.png

编写三个代码内容如下

d53f36fd6b6d4a15a96e49f00160e631.png

e6e2a4288fb248e394c290c8895b8874.png

7d771d834d344caf8968cfdba792d12c.png

编写代码完成后点击键盘的esc键退出编辑,再按下 shift + ;键终端左下角提示输入后输入 wq 后按空格键输入文件名即可回车退出编辑

创建完成输入ls查看文件

d82bf5616df44dbbaf0b5f8d9051d6a8.png

 

 

步骤二:将hello.c编译成.o文件

 

输入命令gcc -c hello.c并通过命令ls查看文件是否生成

165f19e16b3c41c2a76aa698505291a6.png

 

步骤三:由.o文件创建静态库

 

静态库的文件命名都是以lib为前缀,拓展名为.a,例如生成一个名为hello的静态库,则静态库文件名为libhello.a。

创建静态库通过命令ar执行

138e09c4c0bd4579a11ffb275b1e7529.png

ls查看生成的文件

20e10004aee74c15a7f6dab48b128f26.png

 

 

步骤四:在程序中使用静态库

 

输入命令gcc -o hello main.c -L -lmyhello

回车后输入./hello即可看到输出

 

 

步骤五:由.o文件创建动态库文件 

 

动态库文件的命名也是前缀为lib,但拓展名使用的是.so。

例如创建动态库名为hello则生成的动态库文件名为libhello.so。下面为创建名为myhello的动态库

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

并输入ls查看文件是否成功生成

1b4294b7460146b7bb327768362b2a20.png

 

 

步骤六:在程序中使用动态库

 

先运行gcc命令生成目标文件,在试着运行动态库:

gcc -o hello main.c -L -lmyhello

回车后输入./hello

91a7a4141f88444892db901e5252ef47.png

这时会提示报错,原因是程序在运行时,会在usr/lib和/lib等目录中寻找相应的动态文件,而我们的libhello.so不在usr/lib目录中,故出现提示报错

我们可以mv libmyhello.so /use/lib

把动态库文件转移到目录/usr/lib中

然后再输入./hello回车

8d23c60d8a024ad082924a60078bc8d6.png

这样就能正确的使用动态库了。

 

 

 

拓展:当静态库和动态库同名时,gcc命令会如何处理运行

首先删除除了.c 和.h以外的所有文件

9402ccddc9bf40a28bb3a2aea3264b8e.pnga5a25612a8724faf83260b483ce2d5bd.png 

在创建静态库文件libmyhello.a和动态库文件libhello.so

52f4e20470af43369215e8c6ba153e66.png

然后运行

7b2300c3d82948b89f42e7af32c40814.png

可以知道,当静态库和动态库同名时,gcc命令将优先使用动态库,我们可以把动态库文件转移到/usr/lib中,看看能否成功运行 be9c47e097bf4599a28bf0b02e1e7ae4.png

运行成功!

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值