1. 程式人生 > 其它 >ONVIF協議網路攝像機(IPC)客戶端程式開發使用ONVIF框架程式碼(C++)生成動態庫

ONVIF協議網路攝像機(IPC)客戶端程式開發使用ONVIF框架程式碼(C++)生成動態庫

技術標籤:cmakelinuxonvif

概述:
上一篇我們已經將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的原始碼和動態庫框架到此結束,此後我們只需要思考編碼的流程即可。
在這裡插入圖片描述