第2周作业-GCC背后的故事&OpenCV相识何必曾相逢

重庆交通大学信息科学与工程学院

《嵌入式系统基础A》课程

实验报告(2)

班 级: 物联网工程2002

姓名-学号 : 谢志聪632007060527

实验项目名称: 第2周作业-GCC背后的故事&OpenCV相识何必曾相逢

实验项目性质: 设计性

实验所属课程: 《嵌入式系统基础A》

实验室(中心): 南岸校区语音大楼

指 导 教 师 : 娄路

完成时间: 2021 10 8

一、实验内容和任务

  1. (简答题)

一. 学习并掌握可执行程序的编译、组装过程。学习任务如下:

1)阅读、理解和学习材料“用gcc生成静态库和动态库.pdf”和“静态库.a与.so库文件的生成与使用.pdf”,请在Linux系统(Ubuntu)下如实仿做一遍。

2)在第一次作业的程序代码基础进行改编,除了x2x函数之外,再扩展写一个x2y函数(功能自定),main函数代码将调用x2x和x2y ;将这3个函数分别写成单独的3个 .c文件,并用gcc分别编译为3个.o 目标文件;将x2x、x2y目标文件用 ar工具生成1个 .a 静态库文件, 然后用 gcc将 main函数的目标文件与此静态库文件进行链接,生成最终的可执行程序,记录文件的大小。

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

二. Gcc不是一个人在战斗。请说明gcc编译工具集中各软件的用途,了解EFF文件格式。学习任务如下:

阅读、理解和学习材料“Linux GCC常用命令.pdf”和“GCC编译器背后的故事.pdf”,如实仿做一遍。

三. (综合实践)每一个程序背后都站着一堆优秀的代码库。通过学习opencv图像库编程,了解如何借助第三方库函数完成一个综合程序设计。“学了opencv,妈妈再不担忧你不会图像编程啦!”。

在Ubuntu16/18系统下练习编译、安装著名的C/C++图像处理开源软件库 Opencv3.x (过程多,耗时长,需要耐心和细心)。安装成功后:
  1. 编写一个打开图片进行特效显示的代码 test1.cpp(见opencv编程参考资料 );

注意gcc编译命令: gcc test1.cpp -o test1 pkg-config --cflags --libs opencv

1)请解释这条编译命令,它是如何获得opencv头文件、链接lib库文件的路径的?

2)改用make+makefile方式编译 上述程序(用变量命名格式写makefile文件,并包括 clean选项)

  1. 练习使用opencv库编写打开摄像头压缩视频的程序。参考示例代码1和示例代码2。并回答:

1)如果要求打开你硬盘上一个视频文件来播放,请问示例代码1第7行代码如何修改?

2)在示例代码1第9行的while循环中,Mat是一个什么数据结构? 为什么一定要加一句waitKey延时代码,删除它行不行?

3)示例代码1代码会在while循环中一直运行,你如果试图用鼠标关闭图像显示窗口,会发现始终关不掉。需要用键盘Ctrl+C 强制中断程序,非常不友好。如何改进?

  1. 掌握git使用方法,在gitee/github网站创建自己的账号和仓库,将以上作业代码分类上传到仓库中。

二、实验要求

按惯例要求,提交 :1)作业报告md文件;2)博客地址和 3)git仓库地址 到学习通。

三. 实验过程介绍 (此处可以填博客内容)

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

1:编辑生成例子程序 hello.h、hello.c

1)、创建一个目录保存文件并编写代码
在这里插入图片描述

2:将 hello.c 编译成.o 文件

无论静态库,还是动态库,都是由.o 文件创建的。因此,我们必须将源程序 hello.c 通过 g cc 先编译成.o 文件。
在这里插入图片描述

3:由.o 文件创建静态库并使用

静态库文件名的命名规范是以 lib 为前缀,紧接着跟静态库名,扩展名为.a。在创建和使用静态库时, 需要注意这点。创建静态库用 ar 命令。在系统提示符下键入以下命令将创建静态库文件。

在这里插入图片描述
使用静态库:

gcc main.c libmyhello.a -o hello
在这里插入图片描述

4:由.o文件生成动态库并使用动态库

动态库文件名命名规范和静态库文件名命名规范类似,也是在动态库名增加前缀 lib,但其 文件扩展名为.so。

gcc -shared -fPIC -o libmyhello.so hello.o (命令中的-o一定不能够被省略)

在这里插入图片描述
gcc编译得到.o文件 gcc -c hello.c
创建静态库 ar -crv libmyhello.a hello.o
创建动态库 gcc -shared -fPIC -o libmyhello.so hello.o
使用库生成可执行文件 gcc -o hello main.c -L. -lmyhello
执行可执行文件 ./hello,当静态库和动态库同时存在的时候,程序会优先使用动态库。

二、opencv的安装和应用

1、认识 OpenCV

开源计算机视觉(OpenCV)是一个主要针对实时计算机视觉的编程函数库。

2、安装opencv

2.1 下载 OpenCV 3.4.11 数据包
在这里插入图片描述
2.2 进入对应的目录,并更新一下包
在这里插入图片描述
2.3 用cmake安装
在这里插入图片描述
2.4 使用 make 创建编译

在这里插入图片描述

2.5 安装
在这里插入图片描述

3、配置环境

3.1 添加 opencv 库的安装路径
在这里插入图片描述
3.2 在文件末尾加入:
在这里插入图片描述
3.3 查看 opencv 的版本信息
在这里插入图片描述

三、编译

gcc编译器:gcc + 文件名 + -o + 输出文件流名称 +` 支持包
在这里插入图片描述
在用同文件夹下准备一张图片,文件名为:0.jpg
在这里插入图片描述

四、使用实例

4.1 虚拟机获取摄像头权限

4.1.1 输入services.msc
在这里插入图片描述
4.1.2 找到VMware USB Arbitration S…,确保已启动。
在这里插入图片描述
4.1.3 打开虚拟机的设置
在这里插入图片描述
4.1.4 依次选择“虚拟机”——可移动设备——IMC Networks USB2.0 HD UVC WebCam——连接,再确定。
在这里插入图片描述

五、总结

通过对gcc底层逻辑的学习,以及对opencv的学习使用,如实的做一遍后,对gcc有了更深的理解,了解如何借助第三方库函数完成一个综合程序设计,在过程中遇到了许多的问题,不过都解决了,觉得opencv在许多领域都有重要的应用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值