美文网首页
OpenCV静态库编译与链接

OpenCV静态库编译与链接

作者: AIPlayer | 来源:发表于2019-08-12 22:40 被阅读0次

以OpenCV-4.0.0为例说明在Ubuntu环境下的静态库编译与链接方法:

1、编译配置

opencv依赖第三方的库,所以当把opencv编译成静态库的时候,注意要把它运行时必要的依赖库也编译进来,opencv源码内有自己的3rdparty,主要有:libjpeg、libpng、libtiff、libzlib、libwebp、libprotobuf、ffmpeg(用到video时编译)、libgtk(用于显示界面显示,服务器部署不会用到),可以通过cmake -LA来查看配置的编译信息,再根据信息考虑把opencv的哪些module编译进来。

cmake -DEXECUTABLE_OUTPUT_PATH:PATH=$(pwd) \
    -DCMAKE_BUILD_TYPE=RELEASE \
    -DCMAKE_INSTALL_PREFIX=/usr/local \
    -DBUILD_JASPER=ON \
    -DBUILD_JAVA=OFF \
    -DBUILD_JPEG=ON \           #编译opencv 3rdparty自带的libjpeg
    -DBUILD_PERF_TESTS=OFF \
    -DBUILD_PNG=ON \            #编译opencv 3rdparty自带的libpng
    -DBUILD_PROTOBUF=ON \       #编译opencv 3rdparty自带的libprotobuf
    -DBUILD_SHARED_LIBS=NO \    #编译成静态库
    -DBUILD_TESTS=OFF \
    -DBUILD_TIFF=ON \           #编译opencv 3rdparty自带的libtiff
    -DBUILD_ZLIB=ON \           #编译opencv 3rdparty自带的libzlib
    -DBUILD_WEBP=ON \           #编译opencv 3rdparty自带的libwebp
    -DBUILD_opencv_apps=OFF \
    -DBUILD_opencv_core=ON \
    -DBUILD_opencv_calib3d=ON \
    -DBUILD_opencv_dnn=ON \
    -DBUILD_opencv_features2d=ON \
    -DBUILD_opencv_flann=ON \
    -DBUILD_opencv_gapi=OFF \
    -DBUILD_opencv_highgui=ON \
    -DBUILD_opencv_imgcodecs=ON \
    -DBUILD_opencv_imgproc=ON \
    -DBUILD_opencv_java_bindings_generator=OFF \
    -DBUILD_opencv_js=OFF \
    -DBUILD_opencv_ml=ON \
    -DBUILD_opencv_objdetect=OFF \
    -DBUILD_opencv_photo=OFF \
    -DBUILD_opencv_python2=OFF \
    -DBUILD_opencv_python3=OFF \
    -DBUILD_opencv_python_bindings_generator=OFF \
    -DBUILD_opencv_stitching=OFF \
    -DBUILD_opencv_ts=OFF \
    -DBUILD_opencv_video=OFF \
    -DBUILD_opencv_videoio=OFF \
    -DWITH_GTK=OFF \
    -DWITH_GTK_2_X=OFF \
   -DWITH_LAPACK=OFF \

2、链接

链接时指定opencv的静态库以及依赖的库。另外需要注意头文件的问题,通过CMakeLists把opencv加入项目编译时,由于opencv编译完成后要install才会把所用的头文件集中拷贝到一个地方,所以事先将头文件拷贝到了项目的opencv目录下。

set(opencv_libs     #项目用到的库
    opencv_core
    opencv_dnn
    opencv_imgproc
    opencv_imgcodecs
    opencv_ml
    opencv_calib3d
    opencv_highgui
    zlib
    libjasper
    libjpeg-turbo
    libpng
    libtiff
    IlmImf
    libprotobuf
    libwebp)
 #编译opencv
 add_subdirectory(${CMAKE_SOURCE_DIR}/3rdparty/opencv-4.0.0) 
 #增加头文件路径
 include_directories(${CMAKE_SOURCE_DIR}/3rdparty/opencv-4.0.0/include)
 #链接opencv静态库
 target_link_libraries(demo ${opencv_libs} -lrt -lpthread)

相关文章

  • OpenCV静态库编译与链接

    以OpenCV-4.0.0为例说明在Ubuntu环境下的静态库编译与链接方法: 1、编译配置 opencv依赖第三...

  • 2017-12-27 静态库与动态库的区别

    静态库与动态库的区别 1.首先理清楚编译链接期间文件的生成 预处理->编译->汇编-> 链接 .i -> .s -...

  • 静态链接库

    如何创建静态链接库 vs新建项目,选择静态链接库 在项目文件中新建 .cpp 文件与.h 文件 项目编译生成后会产...

  • APP编译及加载过程

    编译过程 静态库&动态库 一.静态库在链接阶段,会将会将汇编生成的目标文件与引用的库一起链接打包到可执行文件中。二...

  • 创建静态库

    iOS深入学习(创建静态库static library) 库包含静态库和动态链接库,他们之间区别是:静态库可以编译...

  • chap 7

    1. 静态链接;加载时共享库的动态链接;运行时共享库的动态链接。 2. 预编译 编译 汇编 链接 加载...

  • .a和Framework的区别?

    静态库动态库区别? 静态库是编译时链接的库,需要链接进你的 Mach-O 文件里,如果需要更新就要重新编译一次,无...

  • iOS静态库和动态库的区别

    iOS开发中静态库和动态库区别: 静态库和动态库是相对编译期和运行期的:静态库在程序编译时会被链接到目标代码中,程...

  • iOS静态库和动态库的使用

    iOS开发中静态库和动态库区别 静态库和动态库是相对编译期和运行期的:静态库在程序编译时会被链接到目标代码中,程序...

  • iOS开发-动态库加载(实时模块更新)

    动态库和静态库 静态库和动态库是相对编译期和运行期:静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改...

网友评论

      本文标题:OpenCV静态库编译与链接

      本文链接:https://www.haomeiwen.com/subject/bqcfdctx.html