判断OpenCV是否为共享库,Windows基于CMake编译Caffe需要opencv共享库

TLDR

  • 只考虑windows下opencv预编译包的情况。

  • 对于opencv2.4.x系列,cmake时指定-DOpenCV_STATIC=OFF则为使用动态共享库,不指定或者指定-DOpenCV_STATIC=ON则为使用静态库。

  • 对于opencv3系列,我用的不多。opencv310看起来是只有动态库。

  • find(OpenCV)后,打印${OpenCV_LIB_PATH}${OpenCV_SHARED}来查看OpenCV库目录、是否为共享库。

静态库:使用的是staticlib目录

OpenCV_LIB_PATH: D:/lib/opencv_249/build/x64/vc12/staticlib
OpenCV_SHARED: OFF

动态库:使用的是lib目录

OpenCV_LIB_PATH: D:/lib/opencv_249/build/x64/vc12/lib
OpenCV_SHARED: ON

完整的找包写法:

find_package(OpenCV QUIET COMPONENTS core highgui imgproc imgcodecs)
if(NOT OpenCV_FOUND) # if not OpenCV 3.x, then imgcodecs are not found
find_package(OpenCV REQUIRED COMPONENTS core highgui imgproc)
endif() message(STATUS "OpenCV library status:")
message(STATUS " version: ${OpenCV_VERSION}")
message(STATUS " libraries: ${OpenCV_LIBS}")
message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")
message(STATUS " OpenCV_SHARED: ${OpenCV_SHARED}") # important

举例:windows上基于CMake编译Caffe,设定OpenCV

1)下载

caffe windows分支源码。https://github.com/BVLC/caffe ,选择windows分支下载。或者git操作。

caffe的预编译的依赖包。我放到了D:/lib/caffe_windows_deps/download/libraries_v120_x64_py27_1.1.0.tar.bz2。等下调用cmake的时候会自动解压到D:/lib/caffe_windows_deps/libraries_v120_x64_py27_1.1.0

2)第一种编译方式:使用官方依赖包编译caffe

caffe-windows根目录下编写compile.bat脚本并执行:

set BUILD_DIR=build-vs2013
if exist %BUILD_DIR% rd /s /q %BUILD_DIR%
md %BUILD_DIR%
cd %BUILD_DIR% set DEP_ROOT=F:/zhangzhuo/lib/caffe_windows_deps cmake -G "Visual Studio 12 2013 Win64" ^
-DCAFFE_DEPENDENCIES_ROOT_DIR=%DEP_ROOT% ^
-DCPU_ONLY=ON ^
-DBLAS=Open ^
.. cd ..

3)第二种编译方式:手工指定opencv路径、是否为动态共享库,编译caffe

opencv249windows pack同时提供动态共享库和静态库,默认静态库。编译caffe需要共享库,需要手动开启:OpenCV_STATIC=OFF

set BUILD_DIR=build-vs2013-opencv249
if exist %BUILD_DIR% rd /s /q %BUILD_DIR%
md %BUILD_DIR%
cd %BUILD_DIR% set DEP_ROOT=D:/lib/caffe_windows_deps
set OpenCV_DIR=D:/lib/opencv_249/build cmake -G "Visual Studio 12 2013 Win64" ^
-DCAFFE_DEPENDENCIES_ROOT_DIR=%DEP_ROOT% ^
-DCPU_ONLY=ON ^
-DBLAS=Open ^
-DOpenCV_DIR=%OpenCV_DIR% ^
-DOpenCV_STATIC=OFF ^
.. cd ..

然后开visual studio,进入Release模式编译

opencv310windows pack只提供了动态库,所以不用指定-DOpenCV_STATIC=OFF

set BUILD_DIR=build-vs2013-opencv310
if exist %BUILD_DIR% rd /s /q %BUILD_DIR%
md %BUILD_DIR%
cd %BUILD_DIR% set DEP_ROOT=F:/zhangzhuo/lib/caffe_windows_deps
set OpenCV_DIR=F:/zhangzhuo/lib/opencv_310/build cmake -G "Visual Studio 12 2013 Win64" ^
-DCAFFE_DEPENDENCIES_ROOT_DIR=%DEP_ROOT% ^
-DCPU_ONLY=ON ^
-DBLAS=Open ^
-DOpenCV_DIR=%OpenCV_DIR% ^
.. cd ..

判断OpenCV是否为共享库,Windows基于CMake编译Caffe需要opencv共享库的更多相关文章

  1. Windows下CMake编译安装OpenCV

    Windows下CMake编译安装OpenCV 这是一个面向新手的在windows上运进opencv, helloword的教程. 在这里我们使用vs2019来编译opencv, 并运行一个hello ...

  2. Unity跨平台C/CPP动态库编译---可靠UDP网络库kcp基于CMake的各平台构建实践

    1.为什么需要动态库 a)提供原生代码(native code)的支持,也叫原生插件,但是我实践的是c/cpp跨平台动态库,这里不具体涉及安卓平台java库和ios平台的objectc库构建. b)某 ...

  3. 基于Anaconda编译caffe+pycaffe+matcaffe in Ubuntu[不用sudo权限]

    目录 caffe 编译 环境 github下载caffe源码 依赖 修改源码的编译配置 报错 测试使用 pycaffe caffe matcaffe caffe 编译 环境 Ubuntu16.04 C ...

  4. 基于cmake编译安装MySQL-5.5

    cmake的重要特性之一是其独立于源码(out-of-source)的编译功能,即编译工作可以在另一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译的影响,因此在同一个源码树上可以 ...

  5. 基于chyh1990/caffe-compact在windows vs2013上编译caffe步骤

    1.      从https://github.com/chyh1990/caffe-compact下载caffe-compact代码: 2.      通过CMake(cmake-gui)生成vs2 ...

  6. geos 3.6.3库windows版本 已编译完成的32位版本和64位版本

    网上教编译方法的很多,直接分享编译完成的很少. 我就把编译完成的分享出来吧. ​geos-3.6.3.tar.bz2 (Changes) 版本的 https://trac.osgeo.org/geos ...

  7. Windows上快速编译caffe CPU版本

    windows上快速安装配置Caffe的 cpu_only环境. 一:安装环境: 1.windows10: 2.Visual Studio2013: 3.Caffe版本:http://github.c ...

  8. 基于cmake编译glew

    cmake已经成为了C/C++开源项目的主流构建工具.glew也提供了cmake的脚本,但用cmake编译glew容易采坑:glew的github上的代码,无论是master分支还是glew-2.1. ...

  9. windows 10 上源码编译OpenCV并支持CUDA | compile opencv with CUDA support on windows 10

    本文首发于个人博客https://kezunlin.me/post/6580691f/,欢迎阅读! compile opencv with CUDA support on windows 10 Ser ...

随机推荐

  1. IfcMaterial

    IfcMaterial is a homogeneous or inhomogeneous substance that can be used to form elements (physical ...

  2. Qt编写安防视频监控系统(界面很漂亮)

    一.前言 视频监控系统在整个安防领域,已经做到了烂大街的程序,全国起码几百家公司做过类似的系统,当然这一方面的需求量也是非常旺盛的,各种定制化的需求越来越多,尤其是这几年借着人脸识别的东风,发展更加迅 ...

  3. tomcat安全基线

    为了符合tomcat安全基线,需要做一下加固: 1.管理用户的密码加密:<摘要算法加密tomcat登录密码> 管理用户在conf/tomcat-users.xml中配置,密码一般是明文形式 ...

  4. Vue父子组件相互传值及调用方法的方案

    Vue父子组件相互传值及调用方法的方案 一.调用方法: 1.父组件调用子组件方法: 2.子组件调用父组件方法: 参考:https://www.cnblogs.com/jin-zhe/p/9523782 ...

  5. Java学习笔记二——正则表达式

    Java正则表达式 正则表达式的规则 “abc” 匹配字符串abc [abc] 匹配[]里任意一个字符 [a-z]: 匹配所有小写字母中的任意一个字符 [A-Z]: 匹配所有大写字母中的任意一个字符 ...

  6. Visual Studio Code (vscode) 配置 C / C++ 环境

    Visual Studio Code (vscode) 配置 C / C++ 环境 昨天突发奇想,想使用vscode配置C++环境,因为不想下载 Dev OR codeblock,然后借助了很多网上教 ...

  7. pytest_allure2 生成html报告

    前言      allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest,也可以集成到Jenkins上展示高大上的报告界面. 环境准备 ...

  8. 【题解】Luogu P5337 [TJOI2019]甲苯先生的字符串

    原题传送门 我们设计一个\(26*26\)的矩阵\(A\)表示\(a~z\)和\(a~z\)是否能够相邻,这个矩阵珂以由\(s1\)得出.答案显然是矩阵\(A^{len_{s2}-1}\)的所有元素之 ...

  9. HBase 系列(三)—— HBase 基本环境搭建

    一.安装前置条件说明 1.1 JDK版本说明 HBase 需要依赖 JDK 环境,同时 HBase 2.0+ 以上版本不再支持 JDK 1.7 ,需要安装 JDK 1.8+ .JDK 安装方式见本仓库 ...

  10. WPF 判断一个对象是否是设计时的窗口类型,而不是运行时的窗口

    原文:WPF 判断一个对象是否是设计时的窗口类型,而不是运行时的窗口 当我们对 Window 类型写一个附加属性的时候,在属性变更通知中我们需要判断依赖对象是否是一个窗口.但是,如果直接判断是否是 W ...