UE4包装错误:OpenSSL链接问题

时间:2019-02-22 06:32:37

标签: c++ openssl unreal-engine4

我目前正在尝试使用Unreal Engine 4创建一个项目,该项目执行来自C ++代码的HTTPS请求。

为了实现该目标,我使用了需要OpenSSL的库c++-httplib,因此我将其添加到了项目中,并提供了includelib文件的位置在我的Project.Build.cs文件中,尤其是libssl.liblibcrypto.lib中。

一切在编辑器中都可以正常工作,但是当我尝试打包项目时,我会收到以下错误(第11-12行)

1:UEBuildTarget.GenerateManifest: Writing manifest to C:\MyProject\Intermediate\Build\Manifest.xml
2:ActionGraph.IsActionOutdated: MyProject.exe: Produced item "MyProject.exe" doesn't exist.
3:ActionGraph.DeleteOutdatedProducedItems: Deleting outdated item: C:\MyProject\Binaries\Win64\MyProject.pdb
4:UEBuildTarget.TryRecycleVersionManifests: Target is not using a version file.
5:ParallelExecutor.ExecuteActions: Building 1 action with 12 processes...
6:ParallelExecutor.ExecuteActions:   [1/1] MyProject.exe
7:ParallelExecutor.ExecuteActions:   vpxmd.lib(vpx_src_vpx_codec.obj) : .netmodule ou module MSIL compil� avec /GL trouv�; red�marrage de l'�dition de liens avec /LTCG�; ajoutez /LTCG � la ligne de commande de l'�dition de liens pour am�liorer les performances de l'�diteur de liens
8:ParallelExecutor.ExecuteActions:      Cr�ation de la biblioth�que C:\MyProject\Binaries\Win64\MyProject.lib et de l'objet C:\MyProject\Binaries\Win64\MyProject.exp
9:ParallelExecutor.ExecuteActions:   G�n�ration de code en cours
10:ParallelExecutor.ExecuteActions:   Fin de la g�n�ration du code
11:ParallelExecutor.ExecuteActions:   libcurl_a.lib(pem_all.obj) : error LNK2005: PEM_read_bio_RSAPrivateKey d�j� d�fini(e) dans libcrypto64MD.lib(libcrypto-1_1-x64.dll)
12:ParallelExecutor.ExecuteActions:   libcurl_a.lib(pem_pkey.obj) : error LNK2005: PEM_read_bio_PrivateKey d�j� d�fini(e) dans libcrypto64MD.lib(libcrypto-1_1-x64.dll)
13:ParallelExecutor.ExecuteActions:   C:\MyProject\Binaries\Win64\MyProject.exe : fatal error LNK1169: un ou plusieurs symboles d�finis � diff�rentes reprises ont �t� rencontr�s
14:Log.WriteException: ==============================================================================
15:Log.WriteException: ERROR: UBT ERROR: Failed to produce item: C:\MyProject\Binaries\Win64\MyProject.exe
16:Log.WriteException:        (see C:\Users\etudiant\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_4.21\UBT-MyProject-Win64-Development.txt for full exception trace)
17:Log.WriteException: 
18:Log.WriteException: BuildException: UBT ERROR: Failed to produce item: C:\MyProject\Binaries\Win64\MyProject.exe
19:Log.WriteException:    à UnrealBuildTool.ActionGraph.ExecuteActions(BuildConfiguration BuildConfiguration, List`1 ActionsToExecute, String& ExecutorName, String TargetInfoForTelemetry, EHotReload HotReload) dans D:\Build\++UE4\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\System\ActionGraph.cs:ligne 507
20:Log.WriteException:    à UnrealBuildTool.UnrealBuildTool.RunUBT(BuildConfiguration BuildConfiguration, String[] Arguments, FileReference ProjectFile, Boolean bCatchExceptions) dans D:\Build\++UE4\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\UnrealBuildTool.cs:ligne 1699
21:Log.WriteException: ==============================================================================
22:UnrealBuildTool.RunUBT: Total build time: 42,37 seconds (Parallel executor: 0,00 seconds)

我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

主要问题是链接器错误LNK2005,这意味着您正在从两个不同的位置链接相同的符号(代码)。

分别来自“ libcurl_a.lib”和“ libcrypto64MD.lib”中的“ PEM_read_bio_RSAPrivateKey”和“ PEM_read_bio_PrivateKey”。

猜测“ libcurl_a”库已经静态链接了openssl,而您正尝试链接到openssl动态库“ libcrypto64MD”(libcrypto-1_1-x64.dll)。

您也许可以删除“ libcrypto64MD.lib”的链接,并从“ libcurl_a.lib”获取打开的ssl。如果由于缺少符号而不能这样做,则可能需要编译或获取使用openssl库的dll版本的libcurl版本。