ONVIF協議網路攝像機(IPC)客戶端程式開發使用ONVIF框架程式碼(C++)生成動態庫
阿新 • • 發佈:2021-01-30
概述:
上一篇我們已經將onvif需要使用的所有.h和.cpp檔案全部放在了ONVIFAPI這個資料夾。即:
1 生成動態庫
下面我們將編寫CMake對上面資料夾內的所有檔案生成動態庫。
這是我的,已經成功生成了動態庫,具體自己需要改一下對應的資源和openssl路徑即可。並且此後使用動態庫時無需再連結openssl,因為再生成動態庫時可以包含了openssl庫。
生成動態庫時的CMake檔案。
cmake_minimum_required(VERSION 2.6)
project(ONVIF)
#列印
message(STATUS "binary dir: " ${PROJECT_BINARY_DIR})
message(STATUS "source dir: " ${PROJECT_SOURCE_DIR})
# 查詢當前目錄下的所有原始檔
# 並將名稱儲存到 DIR_SRCS 變數
aux_source_directory(./ONVIFAPI/ DIR_SRCS)
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -g -ggdb -w -Wall -std=c++11 -fPIC -lpthread -lssl -lcrypto -DWITH_OPENSSL -DWITH_NONAMESPACES " )
INCLUDE_DIRECTORIES(./ ${PROJECT_SOURCE_DIR}/inc)
#OPENSSL
INCLUDE_DIRECTORIES(/home/tyy/mycode/OnvifGetInfo/openssl/include)
LINK_DIRECTORIES(/home/tyy/mycode/OnvifGetInfo/openssl/lib)
# 生成連結庫
add_library(Onvif_Client SHARED ${DIR_SRCS})
生成的onvif動態庫。
連結專案時的CMake檔案,可以看到,針對於上一篇,完全不用再連結openssl庫,只需要新增標頭檔案和連結動態庫即可。
#1.cmake verson,指定cmake版本
cmake_minimum_required(VERSION 2.8)
#2.project name,指定專案的名稱,一般和專案的資料夾名稱對應
PROJECT(OnvifGetInfo)
#列印相應變數資訊
message(STATUS "PROJECT_BINARY_DIR: ${PROJECT_BINARY_DIR}")
message(STATUS "PROJECT_SOURCE_DIR: ${PROJECT_SOURCE_DIR}")
#設定Cmake的除錯型別為Debug,必須設定該行才能gdb除錯
#3.工程需要的原始檔,可以包含原始檔目錄下的所有原始檔,或者set想要的原始檔編譯
AUX_SOURCE_DIRECTORY(./src/ SRC_LIST)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Debug)
#set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -g -ggdb -w -Wall -std=c++11 -fPIC -lssl -lcrypto -DWITH_OPENSSL -DWITH_NONAMESPACES ")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -g -ggdb -w -Wall -std=c++11 -fPIC")
message(STATUS "CMAKE_CXX_FLAGS_DEBUG:${CMAKE_CXX_FLAGS_DEBUG}")
#4.包含標頭檔案目錄,連結庫目錄,多個以空格隔開,關鍵字不區分大小寫
#INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/openssl/include)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/onvif/onvif_client_lib/include)
#LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/openssl/lib/)
LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/onvif/onvif_client_lib/lib)
#AUX_SOURCE_DIRECTORY(./FrameSrc/ SRC_LIST)
#AUX_SOURCE_DIRECTORY(./ONVIFAPI/ SRC_LIST)
#5.新增要編譯生成的可執行檔案
ADD_EXECUTABLE(${PROJECT_NAME} ${SRC_LIST})
#6.新增可執行檔案所需要的連結庫名,參1為生成的可執行檔名
# TARGET_LINK_LIBRARIES(${PROJECT_NAME} crypto)
# TARGET_LINK_LIBRARIES(${PROJECT_NAME} ssl)
MESSAGE(STATUS "PROJECT_NAME is: ${PROJECT_NAME}")
#onviflib
TARGET_LINK_LIBRARIES(${PROJECT_NAME} Onvif_Client)
MESSAGE(STATUS "PROJECT_NAME is: ${PROJECT_NAME}")
成功編譯出項目的可執行檔案。整個ONVIF的原始碼和動態庫框架到此結束,此後我們只需要思考編碼的流程即可。