1. 前言
windows下的类封装是使用VS封装成dll,跟ubuntu下封装成.so有很大的不同,今天就介绍一下在ubuntu下如何将类封装成.so文件,并进行调用。
2. 实践
1.建立工程目录
├── Generate_lib
│ ├── build
│ ├── CMakeLists.txt
│ └── libhello
│ ├── HKCapture.cpp
│ └── HKCapture.hpp
└── use_lib
├── build
├── CMakeLists.txt
└── example.cpp
HKCapture为要封装的类, example用来调用HKCapture
2. 编写Generate_lib 的CMakeLists.txt封装HKCapture类
# cmake needs this line
cmake_minimum_required(VERSION 3.1)
# Define project name
project(HKCapture)
# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
find_package(OpenCV REQUIRED)
#(注:The REQUIRED option stops processing with an error message if the package cannot be found.)去掉这个关键字也可编译
#//生成动态库(SHARED)
add_library(HKCapture SHARED ${PROJECT_SOURCE_DIR}/libhello/HKCapture.cpp)
#//安装文件到目录下
install(TARGETS HKCapture LIBRARY DESTINATION ${PROJECT_SOURCE_DIR}/lib)
install(FILES ${PROJECT_SOURCE_DIR}/libhello/HKCapture.hpp DESTINATION ${PROJECT_SOURCE_DIR}/include)
# Link your application with OpenCV libraries
target_link_libraries(HKCapture PRIVATE ${OpenCV_LIBS})
3. 编写use_lib的CMakeLists.txt
# cmake needs this line
cmake_minimum_required(VERSION 3.1)
# Define project name
project(opencv_example_project)
# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
find_package(OpenCV REQUIRED)
#//头文件目录
include_directories(
${PROJECT_SOURCE_DIR}/../Generate_lib/include
)
link_libraries(
${PROJECT_SOURCE_DIR}/../Generate_lib/lib/libHKCapture.so
)
#target_link_libraries(example libHKCapture)
# Declare the executable target built from your sources
add_executable(opencv_example example.cpp)
# Link your application with OpenCV libraries
target_link_libraries(opencv_example PRIVATE ${OpenCV_LIBS})