Ошибка LNK2005 при интеграции LuaJit в UE4 (Unreal Engine 4) - PullRequest
0 голосов
/ 23 мая 2018

lua51.lib (lua51.dll): ошибка LNK2005: _vsnprintf уже определен в libcurl_a.lib (cryptlib.obj)

GameName.Build.cs ->

// Fill out your copyright notice in the Description page of Project Settings.

using System.IO;
using UnrealBuildTool;

public class GameName : ModuleRules
{
    private string ThirdPartyPath
    {
        get { return Path.GetFullPath(Path.Combine(ModuleDirectory, "../../ThirdParty/")); }
    }  
    private bool LoadLua()
    {
        bool isLibSupported = false;

        string LibrariesPath = Path.Combine(ThirdPartyPath, "Lua", "libraries");

        PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, "lua51.lib"));

        PublicIncludePaths.Add(Path.Combine(ThirdPartyPath, "Lua", "includes"));

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

        return true;
    }
    public GameName(ReadOnlyTargetRules Target) : base(Target)
    {
        PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

        PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });

        PrivateDependencyModuleNames.AddRange(new string[] {  });

        LoadLua();

        // Uncomment if you are using Slate UI
        // PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });

        // Uncomment if you are using online features
        // PrivateDependencyModuleNames.Add("OnlineSubsystem");

        // To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
    }
}

ActorName.cpp ->

// Fill out your copyright notice in the Description page of Project Settings.

#include "ActorName.h"

extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#include "luaconf.h"
#pragma comment(lib, "lua51.lib")
}

// Sets default values
APart::APart()
{
    // Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
    PrimaryActorTick.bCanEverTick = true;
}

// Called when the game starts or when spawned
void APart::BeginPlay()
{
    Super::BeginPlay();
    lua_State *L = luaL_newstate();
    luaL_openlibs(L);
    FVector NewLocation = GetActorLocation();
    NewLocation.Z = NewLocation.Z + 200.0f;
}

// Called every frame
void APart::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);
    /*FVector NewLocation = GetActorLocation();
    float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
    NewLocation.Z += DeltaHeight * 100.0f;
    NewLocation.Y += DeltaHeight * 800.0f;//Scale our height by a factor of 20
    RunningTime += DeltaTime;
    SetActorLocation(NewLocation);*/
}

Я скомпилировал LuaJit для 64x, я не включаю 32x build, мне нужно?Я не собираюсь выпускать свою игру для 32-битных систем, так как нет смысла (смеется). Кроме IOS, я уверен, что вам нужно загрузить 32-битные и 64-битные версии приложения: 3)

Я только когда-либо включал Lua51.lib один раз?Я сделал что-то не так?

1 Ответ

0 голосов
/ 24 февраля 2019

Я знаю, что это довольно старый вопрос, но, поскольку я нигде не нашел подходящего ответа и потратил слишком много времени на выяснение этого, я решил помочь любой бедной душе, которая сталкивается с той же проблемой..

Основная, неизбежная проблема заключается в том, что в msvcbuild версии LuaJIT есть дополнительные символы в ней (по-видимому) без причины.Вот шаги, которые я предпринял для компиляции рабочей версии:

  • Загрузите исходный код LuaJIT для Windows
  • Откройте Makefile и
    • Установите динамический режим
    • ДОПОЛНИТЕЛЬНО включить флаг DLUAJIT_ENABLE_LUA52COMPAT
  • Скомпилировать с помощью mingw32-make (mingw-w64)
  • Скопировать файл lua51.dll в другой файлпапка.
  • Используя командную строку x64 Native Tools для VS 2017, экспортируйте внешние символы, найденные в DLL dumpbin /EXPORTS lua51.dll > lua51.exports
  • Из файла экспорта создайте отдельный файл .def, указывающий наdll, содержащий все ссылки на символы
  • Используя командную строку x64 Native Tools для VS 2017, создайте файлы lib и exp на основе файла def lib /def:lua51.def /out:lua51.lib

Теперь у вас естьDLL и LIB, которая ссылается на него!

  • Теперь вы можете скопировать файл dll, lib и exp в каталог, в который вы хотите установить Lua.
  • Завершить, следуя инструкциям по установке.на сайте LuaJIT, длямои собственные пути, это было
    • Скопируйте все файлы из K: / Git Repos / luajit205-52-libdll / luajit205-52-dll / src в C: / LUA
    • Скопируйте файлы изK: / Git Repos / luajit205-52-libdll / luajit205-52-dll / src / jit для C: / LUA / lua / jit

Я выписал полный текстПроцедура и то, как я работал с ней, вместе с dll / lib / exp, которую я использую для одного из моих репозиториев git, поэтому для получения дополнительных документов и потенциально полезных файлов обращайтесь сюда:
https://github.com/Zaltu/luajit205-52-libdll

...