gpt4 book ai didi

c# - UE4(虚幻引擎4)集成LuaJit时出现LNK2005错误

转载 作者:太空宇宙 更新时间:2023-11-04 12:47:49 31 4
gpt4 key购买 nike

lua51.lib(lua51.dll) : error LNK2005: _vsnprintf already defined in 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);*/
}

我为 64x 编译了 LuaJit,我不包括 32x 版本,我需要吗?我不打算为 32 位系统发布我的游戏,因为没有意义大声笑(除了 IOS,因为我很确定你必须上传应用程序的 32 位和 64 位版本:3)

我只包含过一次 Lua51.lib 吗?我做错了什么吗?

最佳答案

我知道这是一个很老的问题,但由于我在其他任何地方都没有看到合适的答案并且花了太长时间来解决这个问题,我想我会帮助遇到同样问题的任何可怜的灵魂.

基本的,afaik 不可避免的问题是 LuaJIT 的 msvcbuild 版本中有额外的符号(显然)没有理由。以下是我编译工作版本所采取的步骤:

  • 下载 LuaJIT Windows 源代码
  • 打开 Makefile 并
    • 将模式设置为动态
    • 可选择启用 DLUAJIT_ENABLE_LUA52COMPAT 标志
  • 使用 mingw32-make (mingw-w64) 编译
  • 将 lua51.dll 文件复制到另一个文件夹。
  • 使用 VS 2017 的 x64 Native Tools Comand Prompt,导出在 DLL 中找到的外部符号dumpbin/EXPORTS lua51.dll > lua51.exports
  • 从导出文件创建一个单独的 .def 文件,指向包含所有符号引用的 dll
  • 使用 VS 2017 的 x64 Native Tools Comand Prompt,根据 def 文件生成 lib 和 exp 文件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

我写出了完整的过程以及我是如何完成它的,以及我在我的一个 git 存储库中使用的 dll/lib/exp,所以对于额外的文档和可能有用的文件,请访问这里:
https://github.com/Zaltu/luajit205-52-libdll

关于c# - UE4(虚幻引擎4)集成LuaJit时出现LNK2005错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50496746/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com