1 Commits

Author SHA1 Message Date
1c13ef429c 1. 增加 Readme.md
2. 修复 CMakeLists.txt 实现多系统多架构构建
3. 添加 Dockerfile 使用 docker 在多系统多架构下进行编译
4. 修复 library.h 和 .cpp 调整 windows 和 linux 库的差异导致的无法编译通过
2024-10-10 14:11:40 +08:00
7 changed files with 125 additions and 14 deletions

7
.dockerignore Normal file
View File

@@ -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

7
.gitignore vendored
View File

@@ -1,7 +1,12 @@
/.idea
/cmake-build-debug-visual-studio
/cmake-build-release-visual-studio
*.lib
*.dll
*.so
*.a
*.zip
*.zip
/build
/arm64_linux_lib
/arm64_windows_lib
/amd64_linux_lib

View File

@@ -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 ()

22
Dockerfile Normal file
View File

@@ -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/ .

28
README.md Normal file
View File

@@ -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
```

View File

@@ -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

View File

@@ -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;
}