嵌入式系统作业二

嵌入式系统作业二

1.我们要继续围绕gcc编译器做一些工作,主要是关于静态库.a文件和动态库.s文件以及他们的使用
要生成这些文件,首先要准备.o文件,先来看看文件目录吧:
在这里插入图片描述
生成.o文件:
在这里插入图片描述
当然我们可以选择更具体地观察生成.o文件的过程,也就是说
从.i文件变成.s文件再到.o文件:
在这里插入图片描述
再用gcc生成可执行文件:
在这里插入图片描述
可以用gcc -pedantic或gcc -Wall在编译时检查,因为我的代码没有大问题,所以看不到警告:
在这里插入图片描述
objdump命令可以对可执行文件进行反汇编:
在这里插入图片描述
readelf命令可以查看段信息:
在这里插入图片描述

静态库生成.a文件
在这里插入图片描述
链接静态库的基本格式为:
gcc -o main main.o -L./ -ls1 (s1是需要用到的静态库文件libs1.a的写法),示例如下:
在这里插入图片描述
也可以写成:
在这里插入图片描述
或者只生成一个静态库(也就是说是用单个.o文件生成.a文件再用多个.a文件生成.out文件;或者用多个.o文件生成.a文件再用单个.a文件生成.out文件):
在这里插入图片描述
动态库的使用方法几乎完全和静态库一样,只是生成方式略有不同:
在这里插入图片描述
我们将静态库和动态库生成的文件分别命名为m1ainl,m2ainl。
先看看在移除其他文件的情况下,这两个程序能否正常运行:
在这里插入图片描述
动态库生成的程序出现了问题,将相关依赖移入目录,仍不能正常运行:
在这里插入图片描述
实际上我们需要把.so文件放入usr/lib文件夹下,再尝试一遍:
在这里插入图片描述
当然我们也可以通过修改/etc/ld.so.conf文件实现目的:
这里需要在尾部添加.so文件路径
先修改:
在这里插入图片描述

再运行:
在这里插入图片描述
我们可以比较静态库和动态库文件大小以及他们生产的可执行文件大小:
在这里插入图片描述
在这里插入图片描述
发现动态库明显比静态库更大,但是最后生成的可执行文件大小十分接近。

2.OpenCV相关
mat是Opencv的图像存储容器,可以用mat.rows和mat.cols获得图像的高和宽,用create和zero创建新对象,用clone和copyto复制内容。内部可以分为矩阵头和指向像素的矩阵指针。它里面的数据类型type是像CV_8UC1这样的值(8U为8位无符号数,C1表示只有一个通道)
在opencv中,gcc也有自己的用武之地,这是一个用opencv录像的小程序:
在这里插入图片描述
在录像时为了能让用户能自如地操控视频的录制,我们用空格控制录像暂停和继续,用escape键作为停止程序的出口(否则只能ctrl+c强制退出)

我们这样编译它:
在这里插入图片描述
这个pkg-config是一个编译工具,cflags表示编译时选项,libs 是 链接选项,opencv表示应该在opencv目录下查找相应文件,lstdc++则是为了编译c++程序额外加上的。
这样其实不是很好,Opencv官方推荐我们用cmake的方式。
首先需要写好CMakeLists.txt文件:
在这里插入图片描述
接着就是很简单的“cmake ."以及”make"命令就实现了编译
在这里插入图片描述

相反的,打开视频文件也很简单,只需要指定路径就可以,因为是同一个目录下所以只写了文件名:
在这里插入图片描述

3.git的简单使用:
创建版本库:
在这里插入图片描述
连接仓库:在这里插入图片描述

向本地库中添加索引:
在这里插入图片描述
确定提交:
在这里插入图片描述
开始上传:
在这里插入图片描述

提交成功:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值