Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
lua5.3 dll文件中缺少名称 VisualStudio(2017)我试图用Lua 5.3编写一个C++程序,但是链接器没有找到在C++源文件中引用的三个函数名:_C++_Windows_Lua - Fatal编程技术网

lua5.3 dll文件中缺少名称 VisualStudio(2017)我试图用Lua 5.3编写一个C++程序,但是链接器没有找到在C++源文件中引用的三个函数名:

lua5.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”中,并运行

未解析的外部符号\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”中,并运行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>和 CSTDIO < /C> >,或者更好地,如果C++是C++的,而不是C++的,则用C++代码替换那些代码。
extern "C" {

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

}