1. 增加 Readme.md
2. 修复 CMakeLists.txt 实现多系统多架构构建 3. 添加 Dockerfile 使用 docker 在多系统多架构下进行编译 4. 修复 library.h 和 .cpp 调整 windows 和 linux 库的差异导致的无法编译通过
This commit is contained in:
		
							
								
								
									
										7
									
								
								.dockerignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.dockerignore
									
									
									
									
									
										Normal 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
									
									
								
							
							
						
						
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -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 | ||||
| @@ -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
									
								
							
							
						
						
									
										22
									
								
								Dockerfile
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										28
									
								
								README.md
									
									
									
									
									
										Normal 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 | ||||
| ``` | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user