gcc生成静态库.a和动态库.so

文章目录

一、 用gcc生成静态库和动态库
(一)hello实例使用库
1、准备过程
2、静态库的使用
3、动态库的使用
4、静态库与动态库的比较
(二)实例一使用库
(三)实例二使用库
二、ubuntu使用opencv库编写打开摄像头压缩视频
1、安装opencv
2、实例:图片
3、实例:视频
三、 参考资料

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

1、 函数库有静态库与动态库两种

1、 静态库是指在程序编译时会被链接到目标代码中,程序运行时则不需要静态库的存在
2、动态库是指在程序编译时不会连接到目标代码中,而是在程序运行时载入
3、区别:前者是编译时连接的,后者是程序运行时载入的

2、hello实例使用库
a、准备过程
hello.c
在这里插入图片描述
hello.h
在这里插入图片描述
main.c
在这里插入图片描述
gcc编译得到.o文件
gcc -c hello.c
b、静态库使用

1、创建静态库
创建静态库的工具:ar
静态库文件命名规范:以lib作为前缀,是.a的文件(ar -crv libmyhello.a hello.o)

2、程序中使用静态库
a、gcc -o hello main.c -L. -lmyhello
b、gcc main.c libmyhello.a -o hello
c、gcc -c main.c
gcc -o hello main.c libmyhello.a
3、验证静态库的使用
在删除静态库的情况下,运行可执行文件,发现程序正常使用,表明静态库程序执行没有联系。同时也说明在程序编译的时候被链接到代码中

在这里插入图片描述
c、动态库的使用

1、创建动态库
创建工具:gcc 动态库文件命名:以lib为前缀,是.so的文件
gcc -shared -fPIC -o libmyhello.so hello.o(shared表示指定生成动态库链接,-fPIC表示编译为位置独立的代码 )
2、在程序中执行动态库
gcc -o hello main.c -L. -lmyhello
gcc main.c libmyhello.so -o hello
但执行hello文件时会出错,解决方法是将libhello.so复制到目录/usr/lib中。由于运行时是在/usr/lib中找库文件。(mv libmyhello.so /usr/lib)

在这里插入图片描述
d、静态库与动态库的比较

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
在执行可执行文件,会报一个错误,可见当静态库和动态库同时存在的时候,程序会优先使用动态库。

3、实例
sub1.c
在这里插入图片描述
sub2.c
在这里插入图片描述
sub.h
在这里插入图片描述
main.c
在这里插入图片描述

gcc -c sub1.c sub2.c
1、静态库的生成:
ar crv libsub.a sub1.o sub2.o
gcc -o main main.c libsub.a
2、动态库的生成:
gcc -shared -fPIC libsub.so sub1.o sub2.o
mv libsub.so /usr/lib
gcc -o main main.c libsub.so

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

二、unbutu使用opencv库编写打开摄像头压缩视频

1、安装opencv
(1)安装环境:VMware虚拟机安装ubuntu 18.04系统Opencv-3.4.11
(2)下载opencv-3.4.11:.0
(3)解压安装包:
将安装包复制到(home)下进行解压
在这里插入图片描述

命令:unzip opencv-3.4.11.zip
(4)使用cmake安装opencv
首先进入解压后的文件夹:opencv-3.4.11
命令:cd opencv-3.4.11

在这里插入图片描述
进入root用户,并更新一下
命令:sudo su
sudo apt-get update
接着执行命令sudo apt-get install cmake 来安装cmake
在这里插入图片描述
安装依赖库:sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev
在这里插入图片描述

再创建build文件夹,然后进入文件夹
mkdir build
cd build
在这里插入图片描述

使用cmake编译参数:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local …
在这里插入图片描述
(5)使用make创建编译
命令:sudo make -j4
在这里插入图片描述
6、安装
命令:sudo make install
7、配置环境
修改opencv.conf文件,打开后的文件时是空的,添加opencv库的安装路径:/usr/local/lib
sudo gedit /etc/ld.so.conf.d/opencv.conf
更新系统共享连接库:
sudo ldconfig
在这里插入图片描述

配置bash,修改bash.bashrc文件:
sudo gedit /etc/bash.bashrc
在文件末尾加入:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
在这里插入图片描述

保存并退出,然后执行如下命令:
source /etc/bash.bashrc
更新:sudo updatedb
查看opencv版本信息:
pkg-config --modversion opencv
在这里插入图片描述
2、实例:图片
创建一个文件夹存放代码文件:
touch code
cd code
创建一个test1.cpp
nano test1.cpp
在这里插入图片描述

编译文件:
c++文件编译命令:gcc test1.cpp -o test1 pkg-config --cflags --libs opencv
在同一文件夹下准备一张图片,文件名为liupeilin.jpg
在这里插入图片描述

输出结果:
执行以下命令:./test1
3、实例:视频
(1)虚拟机获取摄像头权限
使用快捷键win+R,输入servers.msc,回车
在这里插入图片描述
在这里插入图片描述
在虚拟机中点击设置,选择USB控制器,将USB兼容性设置为USB3.0,并点击确定
在这里插入图片描述

选择IMC NETWORKS USB2.0 VGA UVC WEBCAM,最后点击链接确定
虚拟机右下角的摄像头有个小绿点,则连接成功
在这里插入图片描述
(2)视频播放
创建一个test2.cpp文件
nano test2.cpp
在这里插入图片描述
编译test2.cpp文件
g++ test2.cpp -o test2 pkg-config --cflags --libs opencv
输出结果:./test2
(3)打开摄像头录制权限视频
创建一个test3.cpp文件
nano test3.cpp
在这里插入图片描述
编译test3.cpp文件。
g++ test3.cpp -o test3 pkg-config --cflags --libs opencv
输出:./test3
打开摄像头。按空格键开始录制,按ESC键停止并保存
在这里插入图片描述

三、参考资料

gcc生成静态库.a和动态库.so

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值