Unreal Engine 4 связывает статическую стороннюю библиотеку/SDK (libZPlay)

Я пытаюсь связать статическую стороннюю библиотеку с Unreal Engine 4.

Я пытаюсь включить стороннюю библиотеку/SDK под названием libZPlay. Я пытался следовать вики-руководству Связывание статических библиотек с помощью системы сборки, однако у меня возникли проблемы. Я использую UE 4.8.0 и libZPlay — 32-битную библиотеку.

Ниже приведен мой текущий файл сборки после выполнения руководства:

using UnrealBuildTool;
using System.IO;

public class Rhythm : ModuleRules{
//for linking 3rd party libraries 
private string ModulePath{
    get { return Path.GetDirectoryName(RulesCompiler.GetModuleFilename(this.GetType().Name)); }
}
private string ThirdPartyPath{
    get { return Path.GetFullPath(Path.Combine(ModulePath, "../../ThirdParty/")); }
}
//normal after this
public Rhythm(TargetInfo Target){
    MinFilesUsingPrecompiledHeaderOverride = 1;//faster builds
    bFasterWithoutUnity = true;//faster builds
    PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });
    PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });//for UMG

    LoadlibZPlay(Target); //load libZPlay library
}

public bool LoadlibZPlay(TargetInfo Target){
    bool isLibrarySupported = false;

    if ((Target.Platform == UnrealTargetPlatform.Win64) || (Target.Platform == UnrealTargetPlatform.Win32)){
        isLibrarySupported = true;

        string PlatformString = (Target.Platform == UnrealTargetPlatform.Win64) ? "x64" : "x86"; //prob not needed since only one version of the file
        string LibrariesPath = Path.Combine(ThirdPartyPath, "libZPlay", "Libraries");

        PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, "libzplay.lib"));
        //PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, "libzplay_borland.lib"));
        PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, "libzplay.a"));
        //PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, "libzplay.dll"));
        PublicDelayLoadDLLs.Add(Path.Combine(LibrariesPath, "libzplay.dll"));
    }

    if (isLibrarySupported){
        //include path
        PublicIncludePaths.Add(Path.Combine(ThirdPartyPath, "libZPlay", "Includes"));
    }

    Definitions.Add(string.Format("WITH_LIBZPLAY_BINDING={0}", isLibrarySupported ? 1 : 0));

    return isLibrarySupported;
}

}

У меня есть папка ThirdParty в корневом каталоге проекта, там находится папка libZPlay, которая содержит папку «Включает» с моими заголовочными файлами. Кроме того, в папке libZPlay есть папка Libraries, содержащая мои файлы libZPlay.dll, libZPlay.lib и libZPlay.a. Заголовочный файл подключается следующим образом: #include "../../ThirdParty/libZPlay/Includes/libzplay.h". Файлы визуальной студии также были восстановлены после того, как все это было добавлено.

Я пытаюсь запустить функцию из указанной внешней библиотеки под названием «CreateZPlay()», как показано ниже:

void UMusicAnalyzerWidget::initilizeMusicAnalyzer(){
  player = libZPlay::CreateZPlay();
  filePath = "D:/Christian/Music/Archive/Stick Me In My Heart (Radio Edit).mp3";
}

'player' - это указатель ZPlay, созданный внутри класса UMusicAnalyzerWidget, функция в значительной степени создает и инициализирует объект. Однако при попытке сборки/компиляции я получаю следующие ошибки:

Error   8   error LNK2019: unresolved external symbol __imp_CreateZPlay referenced in function "public: void __cdecl UMusicAnalyzerWidget::execinitilizeMusicAnalyzer(struct FFrame &,void * const)" (?execinitilizeMusicAnalyzer@UMusicAnalyzerWidget@@QEAAXAEAUFFrame@@QEAX@Z)    D:\GitHub\Rhythm\Rhythm\Intermediate\ProjectFiles\MusicAnalyzerWidget.cpp.obj   Rhythm
Error   9   error LNK1120: 1 unresolved externals   D:\GitHub\Rhythm\Rhythm\Binaries\Win64\UE4Editor-Rhythm.dll 1   1   Rhythm
Error   10  error : Failed to produce item: D:\GitHub\Rhythm\Rhythm\Binaries\Win64\UE4Editor-Rhythm.dll D:\GitHub\Rhythm\Rhythm\Intermediate\ProjectFiles\ERROR Rhythm
Error   11  error MSB3075: The command ""D:\Programs\Epic Games\4.8\Engine\Build\BatchFiles\Rebuild.bat" RhythmEditor Win64 Development "D:\GitHub\Rhythm\Rhythm\Rhythm.uproject" -rocket" exited with code 5. Please verify that you have sufficient rights to run this command.   C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.MakeFile.Targets   43  5   Rhythm

После кучи осмотра и прочего я застрял и не знаю, как действовать дальше. Я полагаю, это может быть потому, что это 32-битная библиотека (без какой-либо 64-битной версии), а Unreal Engine 4 компилируется только в 64-битную версию. Любое понимание было бы здорово!


person ChrisTheEngineer    schedule 25.06.2015    source источник


Ответы (1)


Предоставленная вами ссылка фактически подтвердила ваше подозрение, что UE4 не поддерживает 32-битные библиотеки:

With a standard Static Library project we will be targeting x86 (32 bit) machines, which wont work for the UE4 toolset.

Вам понадобится 64-битная версия.

person MuertoExcobito    schedule 25.06.2015
comment
Да, я знаю, что это не сработает с 32-битным бинарником. Я решил использовать другую библиотеку. Однако я хотел бы знать, как я буду создавать 64-битный двоичный файл из того, что дано. - person ChrisTheEngineer; 26.06.2015
comment
Ссылка, которую вы предоставили для библиотеки, не найдена, но все, что вам нужно сделать, это перекомпилировать ее в 64-битной конфигурации. - person MuertoExcobito; 26.06.2015