OpenCV静态库编译与链接
2019-08-12 本文已影响0人
AIPlayer
以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)