opencv2.4.9:为caffe编译精简的opencv_core,opencv_imgproc,opencv_highgui全静态库

编译caffe时用到了opencv,其实caffe只用到OpenCV很小一部功能 ,具体就是opencv_core,opencv_imgproc,opencv_highgui三个库,用于图像读写,如果能将这个三个库全静态编译,就能让caffe在运行时不再依赖opencv。 但是opencv_highgui库在读写jpeg,png,tiff,jpeg2000图像格式时用到了第三方编解码库,默认编译opencv时opencv_highgui是动态连接系统中的图像编解码库(如/usr/lib/libpng用于tiff…..),既然要做静态库,当然要把这些解码库也静态编译进来,怎么办呢? 其实opencv源码中3rdparty文件夹下本就包含了这些图像解码库,只要在cmake生成Makefile脚本时指定编译这些库就好了。

下面全静态编译opencv_core,opencv_imgproc,opencv_highgui三个库的cmake配置命令, #后面是注释部分,使用时请删除

# $install_path用于指定安装位置
# -DBZIP2_LIBRARIES定义bzip2库的位置
cmake . -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$install_path \
    -DBZIP2_LIBRARIES=$BZIP2_INSTALL_PATH/lib/libbz2.a \
    -DBUILD_DOCS=off \
    -DBUILD_SHARED_LIBS=off \    # 指定编译静态库,默认编译动态库(.so,.dll)
    -DBUILD_FAT_JAVA_LIB=off \
    -DBUILD_TESTS=off \
    -DBUILD_TIFF=on \            # 编译3rdparty/libtiff项目
    -DBUILD_JASPER=on \          # 编译3rdparty/libjasper项目用于jpeg2000图像编解码
    -DBUILD_JPEG=on \            # 编译3rdparty/libjpeg项目用于jpeg图像编解码
    -DBUILD_OPENEXR=on \         # 编译3rdparty/openexr项目
    -DBUILD_PNG=on \             # 编译3rdparty/libpng项目用于png图像编解码
    -DBUILD_TIFF=on \            # 编译3rdparty/libtiff项目用于tiff图像编解码
    -DBUILD_ZLIB=on \            # 编译3rdparty/zlib项目
    -DBUILD_opencv_apps=off \    # 以下BUILD_opencv_XXXX选项用于选择或反选指定的opencv模块
    -DBUILD_opencv_calib3d=off \
    -DBUILD_opencv_contrib=off \
    -DBUILD_opencv_features2d=off \
    -DBUILD_opencv_flann=off \
    -DBUILD_opencv_gpu=off \
    -DBUILD_opencv_java=off \
    -DBUILD_opencv_legacy=off \
    -DBUILD_opencv_ml=off \
    -DBUILD_opencv_nonfree=off \
    -DBUILD_opencv_objdetect=off \
    -DBUILD_opencv_ocl=off \
    -DBUILD_opencv_photo=off \
    -DBUILD_opencv_python=off \
    -DBUILD_opencv_stitching=off \
    -DBUILD_opencv_superres=off \
    -DBUILD_opencv_ts=off \
    -DBUILD_opencv_video=off \
    -DBUILD_opencv_videostab=off \
    -DBUILD_opencv_world=off \
    -DBUILD_opencv_lengcy=off \
    -DBUILD_opencv_lengcy=off \
    -DWITH_1394=off \
    -DWITH_EIGEN=off \
    -DWITH_FFMPEG=off \
    -DWITH_GIGEAPI=off \
    -DWITH_GSTREAMER=off \
    -DWITH_GTK=off \
    -DWITH_PVAPI=off \
    -DWITH_V4L=off \
    -DWITH_LIBV4L=off \
    -DWITH_CUDA=off \
    -DWITH_CUFFT=off \
    -DWITH_OPENCL=off \
    -DWITH_OPENCLAMDBLAS=off \
    -DWITH_OPENCLAMDFFT=off
# 开始编译opencv,并安装到指定位置,
# -j 8 指定8线程并行编译
make -j 8 install

使用这个版本的opencv编译出的caffe,用ldd命令查看,可以看出已经没有对opencv的任何依赖了,如下图:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏性能与架构

MySQL打开表数量设置

open_tables表示打开表的数量 opened_tables表示打开过的表数量 我们可以用如下命令查看其具体情况: mysql>show global s...

40750
来自专栏FreeBuf

新型PPT钓鱼攻击分析(含gootkit木马详细分析)

1 概述 最近出现了一种新型的PPT钓鱼攻击方式,该种钓鱼攻击方式不需要宏就能实现执行powershell的功能,通过网络下载gootkit木马进行控制。 2 ...

32640
来自专栏我有一个梦想

Python 项目实践三(Web应用程序)第一篇

一 Djangao入门 当今的网站实际上都是富应用程序(rich application),就像成熟的桌面应用程序一样。Python提供了一组开发Web应用程序...

38460
来自专栏编程直播室

Ionic 2 问题集Console.log 不输出编译Android报错:compileArmv7DebugJavaWithJavac一些更新命令错误:Error: listen EADDRINUS

42440
来自专栏Python小屋

Python批量Excel文件数据导入SQLite数据库的优化方案

说明:1)需要安装扩展库openpyxl;2)随着数据库的增大,导入速度可能会有所下降;3)本文只考虑Python代码优化,没有涉及数据库的优化;4)本文要点在...

47770
来自专栏互联网软件技术

input上传文件个数控制

67630
来自专栏跟着阿笨一起玩NET

VS2010有自带的数据对比功能

在这里需要注意的有两点:第一、在目标数据库中表如果有非空字段,而在源数据库中某个字段的值为空,则同步不会成功(简单点说如果目标数据库中的表有一个字段设置为不允许...

12320
来自专栏木头编程 - moTzxx

AJAX 下拉无刷新分页加载

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

34010
来自专栏马涛涛的专栏

Cookie与Session、LocalStorage与Sessionstorage 对比

SessionStorage 在用户关闭页面(准确的来说是会话(Session)结束)后就失效。其余的和localstorage一样

22320
来自专栏性能与架构

Linux入侵检测工具 - RKHunter

RKHunter是Linux系统平台下的一款开源入侵检测工具 特点 (1)安装便捷,运行快速 (2)扫描范围全,能够检测各种已知的rootkit特征码、端...

56570

扫码关注云+社区

领取腾讯云代金券