lua5.3 dll文件中缺少名称 VisualStudio(2017)我试图用Lua 5.3编写一个C++程序,但是链接器没有找到在C++源文件中引用的三个函数名:
未解析的外部符号\u lua\u close 未解析的外部符号\u lua\u createtable 未解析的外部符号\u luaL\u newstatelua5.3 dll文件中缺少名称 VisualStudio(2017)我试图用Lua 5.3编写一个C++程序,但是链接器没有找到在C++源文件中引用的三个函数名:,c++,windows,lua,C++,Windows,Lua,未解析的外部符号\u lua\u close 未解析的外部符号\u lua\u createtable 未解析的外部符号\u luaL\u newstate 我从.中获取C++源代码。 我下载了Lua 5.3动态库,该库没有导入库,因此我使用MSVC工具创建了导入库,如下所示: dumpbin/exports E:\Documents\Programmation\Lua5.3\lua53.dll 从dumpbin的输出中,我将146个名称复制到一个新文件“mylu53lib.def”中,并运行
我从.
中获取C++源代码。 我下载了Lua 5.3动态库,该库没有导入库,因此我使用MSVC工具创建了导入库,如下所示:dumpbin/exports E:\Documents\Programmation\Lua5.3\lua53.dll
从dumpbin的输出中,我将146个名称复制到一个新文件“mylu53lib.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文件
- 方法存根委托给DLL的库文件
.a
扩展名,这在Linux上更常见(与Windows上的.lib
相反)。但是,如果它是Windows版本,您只需将该文件作为链接器依赖项传递,它就可以正常工作。处理两个约定之间的差异
作为一个旁注,为了使它有效,如果在VisualStudio中创建C++项目,并在默认情况下添加<代码>源代码> CPP < /C> >,您仍然会得到未解决的外部信息。这是因为C源编译为C++代码时,链接器将期望使用的C函数的定义被损坏。这可以通过将文件编译为C代码来防止,或者更可取的方法是,通过使用
extern“C”
告诉它Lua头中的名称应该在链接库中解开:
extern“C”{
#包括
#包括
#包括
#包括
#包括
}
我不太明白你想在那里做什么;通常,您只需extern“C”{#include}
就可以了。@DarkWiiPlayer正如我所说,我从Lua网站上获取了这个示例,所以我包含了三个标题。然而,我确实把这三个include指令放在了一个extern“C”{…}中,它没有一个导入库——等等,什么?这听起来不正确。我不记得有过这样的经历。如果您从下载二进制文件,例如,它带有头文件、DLL和.a
文件(实际上是lib文件)。@BartekBanachewicz那么将.a扩展名更改为.lib就足够了吗?好的,谢谢!当然,下一步的首选步骤是用代码< >代码> >代码> STDIO .H/COD>使用<代码> CSTDLIB < /C>和extern "C" {
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
#include <stdlib.h>
#include <stdio.h>
}