gpt4 book ai didi

c++ - lua5.3 dll 文件中缺少名称

转载 作者:可可西里 更新时间:2023-11-01 14:21:50 29 4
gpt4 key购买 nike

在 Visual Studio (2017) 下,我正在尝试使用 Lua 5.3 编写 C++ 程序脚本,但链接器未找到我的 C++ 源文件中引用的三个函数名称:

unresolved external symbol _lua_close

unresolved external symbol _lua_createtable

unresolved external symbol _luaL_newstate

我从 Lua website 中获取了 C++ 源代码.

我下载了没有导入库的 Lua 5.3 动态库,所以我使用 MSVC 工具创建了导入库,如下所示:

dumpbin /exports E:\Documents\Programmation\Lua5.3\lua53.dll

从 dumpbin 的输出中,我将 146 个名称复制到一个新文件“mylua53lib.def”中,然后运行 ​​lib 以生成 .lib 文件,如下所示:

lib /def:E:\Documents\Programmation\Lua5.3\mylua53lib.def /OUT:E:\Documents\Programmation\Lua5.3\mylua53lib.lib /machine:x86

链接器找不到的三个函数名确实没有出现在 dumpbin 命令的输出中。

最佳答案

用于在 Windows 上进行动态链接的 Lua 二进制发行版应该带有两个二进制文件:

  • 一个包含实际 Lua 代码的 DLL 文件
  • 一个包含委托(delegate)给 DLL 的方法 stub 的库文件

有时库文件会带有 .a 扩展名,这在 Linux 上更常见(与 Windows 上的 .lib 相对)。但是,如果它是 Windows 版本,您只需将该文件作为链接器依赖项传递,它就可以正常工作。 This question处理两个公约之间的差异。

作为旁注,为了使其正常工作,如果您在 Visual Studio 中创建一个 C++ 项目,并默认添加一个 Source.cpp,您仍然会得到 Unresolved 问题外在。这是因为尽管 C 源代码可以很好地编译为 C++ 代码,但链接器会期望所用 C 函数定义的名称经过修饰。这可以通过将文件编译为 C 代码来防止,或者最好是告诉它来自 Lua header 的名称应该在链接库中使用 extern "C" 进行整理:

extern "C" {

#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
#include <stdlib.h>
#include <stdio.h>

}

关于c++ - lua5.3 dll 文件中缺少名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56789069/

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