关于gcc与opencv在Ubuntu的应用

一、关于在Linux中使用gcc生成静态库和动态库的练习;

1)静态库与动态库仿做:
第一步:编辑生成子程序hello.h、hello.c和main.c

先创建一个作业目录,保存本次练习的文件。

#mkdir test1

#cd test1

然后使用vim编辑生成所需的三个文件

程序1:hello.h
在这里插入图片描述

程序2:hello.c

在这里插入图片描述

程序3:main.c

在这里插入图片描述

第二步:将hello.c编译成.o文件,并使用ls查看是否生成hello.o文件

在这里插入图片描述

第三步:由.o文件创建静态库。

静态库文件名的命名规范是以lib为前缀,紧接着跟静态库名,扩展名为.a。例如:将创建的静态库名为myhello,则静态库文件名就是libmyhello.a。创建静态库使用ar命令。

在这里插入图片描述

第四步:在程序中使用静态库。

制作了由hello.o生成的静态库myhello。在使用时需要在用到这些公用函数的源程序中包含这些公用函数的原型声明(在主程序main.c中*#include “hello.h”*该语句就算是声明),然后在用gcc命令生成目标文件时指明静态库名,gcc将会从静态库中将这些公用函数连接到目标文件中。注意:gcc会在静态库名前加上前缀lib,然后追加扩展名.a得到的静态库文件名来查找静态库文件。

下面下生成目标程序hello,然后运行程序看结果。

在这里插入图片描述

第五步:由.o文件创建动态库文件。

动态库文件命名规范与静态库文件类似,在参数上略有差别。

下面生成动态库libmyhello2.so

在这里插入图片描述

第六步:在程序中使用动态库;

在程序中使用动态库和使用静态库完全一样;

可执行文件hello2的创建没有出错,在运行hello2的时候出错了,是因为动态库在程序编译时并不会被连接到代码中,而是在程序运行时才被载入,而此处报错是因为在运行时无法在/usr/lib目录下找到libmyhello2.so文件,所以通过将文件复制到/usr/lib目录下,且此处需要管理员权限才能复制,所以要加上sudo,即sudo mv libmyhello2.so /usr/lib,才能正常运行。

在这里插入图片描述

注:当静态库和动态库同名时,gcc命令(不指定某一个库时)会优先使用动态库,

2)静态库与动态库实作:
静态库:

使用vim编写x2x.h与x2x.c程序:

在这里插入图片描述
在这里插入图片描述

编写x2y.h与x2y.c程序:

在这里插入图片描述

在这里插入图片描述

编写main.c程序:

在这里插入图片描述

写好后使用ls查看文件:

在这里插入图片描述

使用ar将x2x和x2y生产静态库文件:

在这里插入图片描述

用gcc将main函数的目标文件与此静态库连接,生成最终的可执行文件,记录文件大小:

使用ls -l 文件名字即可查询文件大小

在这里插入图片描述

注:这里的main.c有警告但是影响不大

文件大小为8416Bit

在这里插入图片描述

动态库:

使用ar将x2x和x2y生产动态库文件:

在这里插入图片描述

用gcc将main函数的目标文件与此动态库连接,生成最终的可执行文件,记录文件大小:

在这里插入图片描述

可以看到动态库文件的大小为8360B是要比静态库小一些的

二、Linux GCC常用命令

1.简单编译:

test.c程序:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值