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

判断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库目录、是否为共享库。

  • OpenCV 3.x 源码编译时默认设定是,android和ios平台编静态库,其它平台(通常是x86,例如日常的开发机windows/linux/mac)是静态库。也可自行修改BUILD_SHARED_LIBSOFF来生成静态库。

静态库:使用的是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 ..

posted @ 2019-03-28 16:53  ChrisZZ  阅读(459)  评论(0编辑  收藏  举报