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 条评论
登录 后参与评论

相关文章

来自专栏Vamei实验室

树莓派:开机使用

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载。

1994
来自专栏李蔚蓬的专栏

1.Android系统源代码目录与系统目录

想要看完整个Android的源代码,需要懂C、懂脚本、懂Java、软硬兼通。所以一般情况下,我们了解源代码的框架结构,出了问题知道从哪里着手解决就可以了。这就好...

1362
来自专栏一个会写诗的程序员的博客

《Springboot极简教程》Springboot使用Kotlin和Java混合编程配置工程目录结构让kotlin代码的归kotlin目录,java代码归java目录Java代码Kotlin代码互相

要想实现Springboot使用Kotlin和Java混合编程,需要使用kotlin插件:

1002
来自专栏阮一峰的网络日志

树莓派新手入门教程

树莓派(Raspberry Pi)是学习计算机知识、架设服务器的好工具,价格低廉,可玩性高。 ? 本文根据我的亲身经验,介绍如何从零开始,搭建一个树莓派服务器,...

4646
来自专栏ml

c/c++ 软件集成 安装和可卸载软件

  作为一个工程师应具备的一些能力: 1. 首先具备这款软件:     >inno  Setup      免费版还开源,良心货,妥妥的。 2. 这款软件上手也...

3477
来自专栏三木的博客

基于Jenkins和Koji的代码管理及构建系统

<h1>Summary</h1> Currently, we KVM team are maintaining the code repository of t...

1867
来自专栏CreateAMind

国产ros小车及相关文档

Roch(robot platform for commecial and home) integrated multiple different RGBD c...

1062
来自专栏Java学习123

查看Linux系统信息

26010
来自专栏人工智能LeadAI

Tensorflow on Spark爬坑指南

由于机器学习和深度学习不断被炒热,Tensorflow作为Google家(Jeff Dean大神)推出的开源深度学习框架,也获得了很多关注。Tensorflow...

5499
来自专栏雨过天晴

原 MYSQL单机多实例

2206

扫码关注云+社区