From 1c13ef429c7b30f586b08d0eed9cc67e06fb0114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=B8=85=E9=94=9F?= <811096647@qq.com> Date: Thu, 10 Oct 2024 14:11:40 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E5=A2=9E=E5=8A=A0=20Readme.md=202.=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20CMakeLists.txt=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E5=A4=9A=E7=B3=BB=E7=BB=9F=E5=A4=9A=E6=9E=B6=E6=9E=84=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=203.=20=E6=B7=BB=E5=8A=A0=20Dockerfile=20=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=20docker=20=E5=9C=A8=E5=A4=9A=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E5=A4=9A=E6=9E=B6=E6=9E=84=E4=B8=8B=E8=BF=9B=E8=A1=8C=E7=BC=96?= =?UTF-8?q?=E8=AF=91=204.=20=E4=BF=AE=E5=A4=8D=20library.h=20=E5=92=8C=20.?= =?UTF-8?q?cpp=20=E8=B0=83=E6=95=B4=20windows=20=E5=92=8C=20linux=20?= =?UTF-8?q?=E5=BA=93=E7=9A=84=E5=B7=AE=E5=BC=82=E5=AF=BC=E8=87=B4=E7=9A=84?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E7=BC=96=E8=AF=91=E9=80=9A=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 7 ++++++ .gitignore | 7 +++++- CMakeLists.txt | 60 ++++++++++++++++++++++++++++++++++++++++------- Dockerfile | 22 +++++++++++++++++ README.md | 28 ++++++++++++++++++++++ include/library.h | 11 ++++++--- library.cpp | 4 ++-- 7 files changed, 125 insertions(+), 14 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 README.md diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..d4cd4a6 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +/.idea +/.git +/cmake-build-debug-visual-studio +/V6.1.9.45_build20220902_ArmLinux64_ZH_20240802154010_lib.zip +/V6.1.9.48_build20230410_linux64_20240829112751_lib.zip +/V6.1.9.48_build20230410_win64_20240829112623_lib.zip +/build \ No newline at end of file diff --git a/.gitignore b/.gitignore index 37f9834..3366e72 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,12 @@ /.idea /cmake-build-debug-visual-studio +/cmake-build-release-visual-studio *.lib *.dll *.so *.a -*.zip \ No newline at end of file +*.zip +/build +/arm64_linux_lib +/arm64_windows_lib +/amd64_linux_lib \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 5b48cec..43d9711 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,27 @@ -cmake_minimum_required(VERSION 3.29) -project(HikNetSDKPkg) +cmake_minimum_required(VERSION 3.15) +project(HikNetSDKPkg CXX) set(CMAKE_CXX_STANDARD 11) -include_directories("./src/include/Hik/amd64") -add_compile_definitions(Export) + +set(OS ${CMAKE_HOST_SYSTEM_NAME}) +set(Arch ${CMAKE_HOST_SYSTEM_PROCESSOR}) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) + +message(STATUS "Target Operating System: ${OS}") +message(STATUS "Target Architecture: ${Arch}") + +if(OS STREQUAL "Windows") + set(CMAKE_DEBUG_POSTFIX "_win_amd64_d") + set(CMAKE_RELEASE_POSTFIX "_win_amd64") +elseif (Arch STREQUAL "x86_64" OR Arch STREQUAL "amd64") + set(CMAKE_DEBUG_POSTFIX "_linux_amd64_d") + set(CMAKE_RELEASE_POSTFIX "_linux_amd64") +elseif (Arch STREQUAL "aarch64" OR Arch STREQUAL "arm64") + set(CMAKE_DEBUG_POSTFIX "_linux_arm64_d") + set(CMAKE_RELEASE_POSTFIX "_linux_arm64") +endif () add_library(HikNetSDKPkg SHARED library.cpp @@ -13,8 +31,34 @@ add_library(HikNetSDKPkg SHARED src/FormatTrans.cpp ) +target_compile_definitions(HikNetSDKPkg PRIVATE Export) -target_link_directories(HikNetSDKPkg PUBLIC ./HCNetSDKamd64/lib) -target_link_libraries(HikNetSDKPkg "HCNetSDK.lib") -target_link_libraries(HikNetSDKPkg "HCCore.lib") -target_link_libraries(HikNetSDKPkg "GdiPlus.lib") +if(Arch STREQUAL "x86_64" OR OS STREQUAL "Windows") + target_include_directories(HikNetSDKPkg PRIVATE "./src/include/Hik/amd64") +elseif (Arch STREQUAL "aarch64") + target_include_directories(HikNetSDKPkg PRIVATE "./src/include/Hik/arm64") +endif () + +if(OS STREQUAL "Windows") + target_link_directories(HikNetSDKPkg PRIVATE "./arm64_windows_lib") + target_link_libraries(HikNetSDKPkg PRIVATE "HCNetSDK.lib") + target_link_libraries(HikNetSDKPkg PRIVATE "HCCore.lib") + target_link_libraries(HikNetSDKPkg PRIVATE "GdiPlus.lib") +elseif (Arch STREQUAL "x86_64") + target_link_directories(HikNetSDKPkg PRIVATE "./amd64_linux_lib") + target_link_libraries(HikNetSDKPkg "libHCCore.so") + target_link_libraries(HikNetSDKPkg "libhcnetsdk.so") + target_link_libraries(HikNetSDKPkg "libhpr.so") + target_link_libraries(HikNetSDKPkg "libz.so") +elseif (Arch STREQUAL "aarch64") + target_link_directories(HikNetSDKPkg PRIVATE "./arm64_linux_lib") + target_link_libraries(HikNetSDKPkg "libAudioRender.so") + target_link_libraries(HikNetSDKPkg "libcrypto.so") + target_link_libraries(HikNetSDKPkg "libHCCore.so") + target_link_libraries(HikNetSDKPkg "libhcnetsdk.so") + target_link_libraries(HikNetSDKPkg "libhpr.so") + target_link_libraries(HikNetSDKPkg "libPlayCtrl.so") + target_link_libraries(HikNetSDKPkg "libssl.so") + target_link_libraries(HikNetSDKPkg "libSuperRender.so") + target_link_libraries(HikNetSDKPkg "libz.so") +endif () \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6086e19 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +FROM alpine:3.19 AS deps + +WORKDIR /usr + +RUN apk add gcc g++ cmake make acl + +FROM alpine:3.19 AS build + +WORKDIR /hikbuild + +COPY --from=deps /usr /usr +COPY --from=deps /lib /lib +COPY . /hikbuild + +RUN cmake . -D Arch=${TARGETARCH} -D CMAKE_BUILD_TYPE=RELEASE && make + +FROM alpine:3.19 AS export + +WORKDIR /home +COPY --from=build /hikbuild/build /home + +#docker buildx build --platform linux/amd64,linux/arm64 --output type=local,dest=/hikbuild/ . \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..2307016 --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +## 已验证系统环境 + +| 架构 | 系统 |使用docker | +|:-------:|:-----------:|:-------:| +| aarch64 | alpine:3.19 | 🐳 | +| x86_64 | alpine:3.19 | 🐳 | +| x86_64 | windows 10 | | + +## 编译流程 +### 1. 下载库 +在仓库的发行版中 将 HikNetSDK 标签下的不同架构的 lib 放在源码根目录中 +```shell +D:. +│ V6.1.9.45_build20220902_ArmLinux64_ZH_20240802154010_lib.zip +│ V6.1.9.48_build20230410_linux64_20240829112751_lib.zip +│ V6.1.9.48_build20230410_win64_20240829112623_lib.zip +``` +### 2.1 编译 Linux 部分 +将下载的zip压缩文件 `ArmLinux64` 和 `linux64` 在源码目录解压,然后重命名 +```shell +V6.1.9.45···ArmLinux64···.zip --解压后重命名为--> arm64_linux_lib +V6.1.9.48···linux64···.zip --解压后重命名为--> amd64_linux_lib +``` +### 2.2 编译 Windows 部分 +将下载的zip压缩文件 `win64` 在源码目录解压,然后重命名 +```shell +V6.1.9.45···win64···.zip --解压后重命名为--> arm64_windows_lib +``` diff --git a/include/library.h b/include/library.h index 37ea326..98fe317 100644 --- a/include/library.h +++ b/include/library.h @@ -1,13 +1,18 @@ #ifndef HIKVISION_NETWORK_SDK_PACKAGING_LIBRARY_LIBRARY_H #define HIKVISION_NETWORK_SDK_PACKAGING_LIBRARY_LIBRARY_H -#ifdef Export -#define Omnimatrix __declspec(dllexport) +#ifdef _WIN32 + #ifdef Export + #define Omnimatrix __declspec(dllexport) + #else + #define Omnimatrix __declspec(dllimport) + #endif #else -#define Omnimatrix __declspec(dllimport) + #define Omnimatrix #endif + #ifdef __cplusplus extern "C" { #endif diff --git a/library.cpp b/library.cpp index df023de..981da3c 100644 --- a/library.cpp +++ b/library.cpp @@ -63,7 +63,7 @@ char* CheckTimeRegionWithMonth(void* PtrHIKNvr,int year,int month){ res = HIKNvrObj->TimeToJson(select_time, &available_date_vec).dump(); } char* cString = new char[res.size() + 1]; - strcpy_s(cString, res.size()+1,res.c_str()); + std::strcpy(cString,res.c_str()); return cString; } @@ -81,6 +81,6 @@ char* CheckTimeRegionWithDay(void* PtrHIKNvr,int year,int month,int day){ res = HIKNvrObj->TimeToJsonInDay(select_time, &available_time_vec).dump(); } char* cString = new char[res.size() + 1]; - strcpy_s(cString, res.size()+1,res.c_str()); + std::strcpy(cString,res.c_str()); return cString; } \ No newline at end of file