文章目录
一、 用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