迅为干货|静态库和动态库的制作和使用-IMX6开发板新增ubuntu16_安卓6.0_新增Yocto_新增设备树相关历程...

因为我们在写代码的时候,不可能每个代码都要重新开始写,我们可以使用别人写好的,成熟的代码,所以,库的存在就变得非常有意义。linux的下的库主要有俩种,一个是动态库,一个是静态库。

1简介

      将一个程序编译成可执行程序要经过预编译,编译,汇编,和链接这个几个步骤,而动态库和静态库的主要区别就是在链接阶段怎么处理这些库。

       静态库在程序编译的时候会被链接到目标文件当中,在程序运行的时候不在需要这些库,程序移植方便,但是更新会很麻烦,可执行文件比较大,浪费空间,而动态库在编译的时候并不会链接到目标文件中去,所以程序在运行的时候还需要这些动态库的存在。可执行程序比较小,但是程序在运行的过程中必须提供相应的库。

 

2实验操作 

实验一:静态库的制作和使用

实验目标:制作一个静态库并使用。

实验内容:

静态库的制作主要有以下几个步骤:

1,生成目标文件。

2,使用ar命令创建静态函数库。

命名规则: 

必须是lib[库的名字].a,括号里面的为你的库的名字,扩展名为.a

使用方法:

在使用gcc编译的时候加上参数-L 和你的库的路径和你要链接的库。

我们创建一个文本并输入以下代码。

将这个文件放进ubuntu中。生成目标文件,输入以下命令:

输入以下命令创建静态库, -c是创建的意思,-是替换的意思。

在当前目录创建一个文件输入以下代码:

接着在ubuntu上编译这个程序,编译的时候链接我们上面那生成的库,输入以下命令:

实验二:动态库的制作和使用

实验目标:制作一个动态库并使用。

实验内容:

动态库的制作主要有以下几个步骤:

1,生成目标文件。

2,生成动态库。

命名规则: 

lib[库的名字].so,括号里面的为你的库的名字,扩展名为.so

使用方法:

将生成的库放在/usr/lib 或者 /lib下面去。

在实验一的lib.c基础上,输入下图命令,-fPIC表示与源码位置无关,-shared 生成动态库

编译test.c。输入以下命令

运行可执行文件test发现不可以运行成功,提示如下:

因为Linux会默认在/usr/lib 或者 /lib下面找,但是我们的库并不在这俩个路径下面,我们将我们生成的库拷贝到/usr/lib下面去,然后我们在运行我们程序。

运行程序:

3实验分析

通过实验我们可以发现,使用动态库编译生成的可执行文件要比静态库的要小。

使用动态库:

使用静态库:

另外我们在编译的时候参数-L 是用来指定库的搜索路径,-l是用来指定要链接的库的名字.

这个库的名称是什么,就是我们起的库的名字,如下:

开发利器:迅为IMX6开发板 新增ubuntu16,安卓6.0,新增Yocto,新增设备树相关历程

转载于:https://www.cnblogs.com/mingyue77/p/11309323.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值