lua5.3 dll文件中缺少名称

时间:2019-06-27 10:29:19

标签: c++ windows lua

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

  

未解析的外部符号_lua_close

     

未解析的外部符号_lua_createtable

     

未解析的外部符号_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命令的输出中。

1 个答案:

答案 0 :(得分:1)

旨在在Windows上进行动态链接的Lua二进制发行版应随附两个二进制文件:

  • 具有实际Lua代码的DLL文件
  • 具有方法存根委托给DLL的库文件

有时,库文件将带有.a扩展名,该扩展名在Linux上更常见(与Windows上的.lib相对)。但是,如果是Windows构建,则只需将该文件作为链接器依赖项传递就可以了。 This question处理两种约定之间的差异。

作为一个旁注,为了使其正常工作,如果您在Visual Studio中创建一个C ++项目,并按照默认建议添加一个Source.cpp,则仍然会遇到无法解决的外部问题。这是由于以下事实:尽管C源代码可以很好地编译为C ++代码,但链接程序将期望使用的C函数的定义名称乱码。可以通过将文件编译为C代码,或者最好通过告诉文件使用extern "C"在链接库中取消Lua头文件中的名称来防止这种情况:

extern "C" {

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

}