重庆交通大学信息科学与工程学院
《嵌入式系统基础A》课程
实验报告(2)
班 级: 物联网工程2002
姓名-学号 : 谢志聪632007060527
实验项目名称: 第2周作业-GCC背后的故事&OpenCV相识何必曾相逢
实验项目性质: 设计性
实验所属课程: 《嵌入式系统基础A》
实验室(中心): 南岸校区语音大楼
指 导 教 师 : 娄路
完成时间: 2021 年 10 月 8 日
一、实验内容和任务
- (简答题)
一. 学习并掌握可执行程序的编译、组装过程。学习任务如下:
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 (过程多,耗时长,需要耐心和细心)。安装成功后:
- 编写一个打开图片进行特效显示的代码 test1.cpp(见opencv编程参考资料 );
注意gcc编译命令: gcc test1.cpp -o test1 pkg-config --cflags --libs opencv
1)请解释这条编译命令,它是如何获得opencv头文件、链接lib库文件的路径的?
2)改用make+makefile方式编译 上述程序(用变量命名格式写makefile文件,并包括 clean选项)
- 练习使用opencv库编写打开摄像头压缩视频的程序。参考示例代码1和示例代码2。并回答:
1)如果要求打开你硬盘上一个视频文件来播放,请问示例代码1第7行代码如何修改?
2)在示例代码1第9行的while循环中,Mat是一个什么数据结构? 为什么一定要加一句waitKey延时代码,删除它行不行?
3)示例代码1代码会在while循环中一直运行,你如果试图用鼠标关闭图像显示窗口,会发现始终关不掉。需要用键盘Ctrl+C 强制中断程序,非常不友好。如何改进?
- 掌握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在许多领域都有重要的应用。