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 | /.idea | ||||||
| /cmake-build-debug-visual-studio | /cmake-build-debug-visual-studio | ||||||
|  | /cmake-build-release-visual-studio | ||||||
| *.lib | *.lib | ||||||
| *.dll | *.dll | ||||||
| *.so | *.so | ||||||
| *.a | *.a | ||||||
| *.zip | *.zip | ||||||
|  | /build | ||||||
|  | /arm64_linux_lib | ||||||
|  | /arm64_windows_lib | ||||||
|  | /amd64_linux_lib | ||||||
| @@ -1,9 +1,27 @@ | |||||||
| cmake_minimum_required(VERSION 3.29) | cmake_minimum_required(VERSION 3.15) | ||||||
| project(HikNetSDKPkg) |  | ||||||
|  |  | ||||||
|  | project(HikNetSDKPkg CXX) | ||||||
| set(CMAKE_CXX_STANDARD 11) | 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 | add_library(HikNetSDKPkg SHARED | ||||||
|         library.cpp |         library.cpp | ||||||
| @@ -13,8 +31,34 @@ add_library(HikNetSDKPkg SHARED | |||||||
|         src/FormatTrans.cpp |         src/FormatTrans.cpp | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | target_compile_definitions(HikNetSDKPkg PRIVATE Export) | ||||||
|  |  | ||||||
| target_link_directories(HikNetSDKPkg PUBLIC ./HCNetSDKamd64/lib) | if(Arch STREQUAL "x86_64" OR OS STREQUAL "Windows") | ||||||
| target_link_libraries(HikNetSDKPkg "HCNetSDK.lib") |     target_include_directories(HikNetSDKPkg PRIVATE "./src/include/Hik/amd64") | ||||||
| target_link_libraries(HikNetSDKPkg "HCCore.lib") | elseif (Arch STREQUAL "aarch64") | ||||||
| target_link_libraries(HikNetSDKPkg "GdiPlus.lib") |     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 | #ifndef HIKVISION_NETWORK_SDK_PACKAGING_LIBRARY_LIBRARY_H | ||||||
| #define HIKVISION_NETWORK_SDK_PACKAGING_LIBRARY_LIBRARY_H | #define HIKVISION_NETWORK_SDK_PACKAGING_LIBRARY_LIBRARY_H | ||||||
|  |  | ||||||
| #ifdef Export | #ifdef _WIN32 | ||||||
| #define Omnimatrix __declspec(dllexport) |     #ifdef Export | ||||||
|  |         #define Omnimatrix __declspec(dllexport) | ||||||
|  |     #else | ||||||
|  |         #define Omnimatrix __declspec(dllimport) | ||||||
|  |     #endif | ||||||
| #else | #else | ||||||
| #define Omnimatrix __declspec(dllimport) |     #define Omnimatrix | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| extern "C" { | extern "C" { | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -63,7 +63,7 @@ char* CheckTimeRegionWithMonth(void* PtrHIKNvr,int year,int month){ | |||||||
|         res = HIKNvrObj->TimeToJson(select_time, &available_date_vec).dump(); |         res = HIKNvrObj->TimeToJson(select_time, &available_date_vec).dump(); | ||||||
|     } |     } | ||||||
|     char* cString = new char[res.size() + 1]; |     char* cString = new char[res.size() + 1]; | ||||||
|     strcpy_s(cString, res.size()+1,res.c_str()); |     std::strcpy(cString,res.c_str()); | ||||||
|     return cString; |     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(); |          res = HIKNvrObj->TimeToJsonInDay(select_time, &available_time_vec).dump(); | ||||||
|     } |     } | ||||||
|     char* cString = new char[res.size() + 1]; |     char* cString = new char[res.size() + 1]; | ||||||
|     strcpy_s(cString, res.size()+1,res.c_str()); |     std::strcpy(cString,res.c_str()); | ||||||
|     return cString; |     return cString; | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user