Unreal Engine 4.25中如何使用内置OpenSSL库?
在Unreal Engine 4.25中正确使用内置OpenSSL库
一、正确配置项目Build.cs文件
UE4的第三方库依赖必须通过项目的.Build.cs文件配置,而非手动修改VS路径。按以下步骤修改:
- 打开项目根目录下
Source/YourProjectName/YourProjectName.Build.cs文件 - 在
ModuleRules构造函数中添加OpenSSL依赖配置:
using UnrealBuildTool; public class YourProjectName : ModuleRules { public YourProjectName(ReadOnlyTargetRules Target) : base(Target) { // 保留原有配置(如PrivateDependencyModuleNames等) // 针对Win64平台添加OpenSSL依赖(根据你的目标平台调整) if (Target.Platform == UnrealTargetPlatform.Win64) { AddEngineThirdPartyPrivateStaticDependencies(Target, "OpenSSL"); } } }
错误原因说明
AddEngineThirdPartyPrivateStaticDependencies必须在ModuleRules的构造函数内调用,且需指定目标平台,否则会报“不在当前上下文”错误ExtraModuleNames.AddRange用于添加UE原生C++模块,OpenSSL属于第三方库,不能用此方式引用
二、正确引用头文件
配置Build.cs后,UE构建系统会自动处理OpenSSL的包含路径,无需手动在VS中添加目录。直接在C++代码中引用:
#include "openssl/sha.h"
解决编译“文件不存在”问题
之前手动添加VS包含目录会导致UE构建时路径冲突,删除手动添加的路径,依赖Build.cs自动管理即可解决。IntelliSense能识别但编译报错,正是因为手动路径与UE构建路径不一致导致的。
三、SHA-256哈希生成示例代码
以下是生成文件SHA-256哈希的实用代码,可直接用于对比本地与服务器地图文件:
#include "openssl/sha.h" #include "Misc/FileHelper.h" #include "Misc/Paths.h" FString GenerateFileSHA256(const FString& FilePath) { TArray<uint8> FileContent; // 读取文件内容 if (!FFileHelper::LoadFileToArray(FileContent, *FilePath)) { return TEXT(""); } uint8 HashResult[SHA256_DIGEST_LENGTH]; SHA256_CTX ShaContext; SHA256_Init(&ShaContext); SHA256_Update(&ShaContext, FileContent.GetData(), FileContent.Num()); SHA256_Final(HashResult, &ShaContext); // 将哈希值转换为十六进制字符串 FString HashString; for (const uint8 Byte : HashResult) { HashString += FString::Printf(TEXT("%02x"), Byte); } return HashString; }
注意事项
- 确保代码在C模块中编写,蓝图无法直接调用OpenSSL函数(可通过蓝图函数库封装C逻辑)
- 编译时选择与配置匹配的平台(如Win64),OpenSSL库为平台专属
- 无需手动复制OpenSSL库文件,UE构建系统会自动链接对应平台的预编译库
内容的提问来源于stack exchange,提问作者Seth Bembeneck
相关产品推荐
相关产品推荐

