GCC背后的故事&OpenCV相逢何必曾相识

目录

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

1、hello实例

(1)第一步:编辑生成例子程序hello.h、hello.c和mian.c.

(2)第二步:用gcc将hello.c编译成.o文件。

(3)第三步:由.o文件创建静态库

(4)第四步:在程序中使用静态库

(5)第五步:由.o文件创建动态库文件

(6)第六步:在程序中使用动态库

 二、静态库.a与.so库文件的生成与使用

(1)代码:

​ (2)静态库.a文件的生成和使用

(3)共享库.so文件的生成和使用

三、实例

第一步:

第二步:静态库

第三步:动态库

 第四步:静态库与动态库的生成文件的比较

四、OpenCV3.4.11的安装及使用实例

(1)OpenCV3.4.11的安装

(2)使用示例——图片

 (3)使用示例——视频

1、虚拟机获取摄像头权限

2、播放视频:

3、录制视频

 五、GCC编译器背后的故事

(1)准备工作

 (2)编译过程

1、预处理

2、编译

​ 3、汇编

4、链接

(3)分析ELF文件

1、ELF文件的段

2.反汇编ELF

六、总结

 七、参考链接


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

1、hello实例

(1)第一步:编辑生成例子程序hello.h、hello.c和mian.c.

程序一:hello.h

程序二:hello.c

程序三:main.c

(2)第二步:用gcc将hello.c编译成.o文件。

运行ls命令查看是否生成.o文件。

在ls命令中存在hello.o文件。

(3)第三步:由.o文件创建静态库

创建静态库的工具:ar
静态库文件命名规范:以lib作为前缀,是.a文件

用ls命令可以查看到上述图片中的结果,可知创建成功。

(4)第四步:在程序中使用静态库

①gcc -o hello main.c -L. -lmyhello

注意:对于自定义的静态库,main.c还可以放在-L.和-lmyhello之间,否则myhello没有定义。
-L.:表示连接的库在当前目录

②gcc main.c libmyhello.a -o hello

 ③先生成main.o gcc -c main.c
生成可执行文件 gcc -o hello main.c libmyhello.a

验证静态库的特点
在删掉静态库的情况下,运行可执行文件,发现程序仍旧正常运行,表明静态库跟程序执行没有联系。同时,也表明静态库是在程序编译的时候被连接到代码中的。

(5)第五步:由.o文件创建动态库文件

创建动态库的工具:gcc
动态库文件命名规范:以lib作为前缀,是.so文件

gcc -shared -fPIC -o libmyhello.so hello.o
shared:表示指定生成动态链接库,不可省略
-fPIC:表示编译为位置独立的代码,不可省略

动态文件生成。

(6)第六步:在程序中使用动态库

gcc -o hello main.c -L. -lmyhello或gcc main.c libmyhello.so -o hello
再运行可执行文件hello,会出现错误。如图

解决方法:将libmyhello.so复制到目录/usr/lib中。

 二、静态库.a与.so库文件的生成与使用

(1)代码:

A1.c程序:

A2.c程序:

A.h程序

test程序

 (2)静态库.a文件的生成和使用

 解决方式:将test.c中的exit(0)修改为return 0

 

  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值