LUA5.3 DLL文件中缺少名称

Missing names in lua5.3 dll file

本文关键字:DLL 文件 LUA5      更新时间:2023-10-16

在Visual Studio(2017(下,我试图用LUA 5.3脚本脚本C 程序,但链接器在我的C 源文件中找不到三个函数名称:

未解决的外部符号_lua_close

未解决的外部符号_lua_createtable

未解决的外部符号_lual_newstate

我从LUA网站拿走了C 源。

我下载了LUA 5.3动态库,该库不带一个导入库,因此我使用MSVC工具创建了导入库:

dumpbin /exports E:DocumentsProgrammationLua5.3lua53.dll

从Dumpbin的输出中,我在" mylua53lib.def"中复制了146个名称。并运行lib以生成.lib文件这样的文件:

lib /def:E:DocumentsProgrammationLua5.3mylua53lib.def /OUT:E:DocumentsProgrammationLua5.3mylua53lib.lib /machine:x86

链接器未发现的三个函数名称确实没有出现在dumpbin命令的输出中。

Windows上用于动态链接的LUA的二进制分布应带有两个二进制文件:

  • 带有实际LUA代码的DLL文件
  • 一个带有方法存根的库文件委派到dll

有时,库文件将带有.a扩展名,该扩展名在Linux上更常见(与Windows上的.lib相对(。但是,如果是窗口构建,则可以简单地将该文件作为链接器依赖项传递,并且可以正常工作。这个问题涉及两次惯例之间的差异。

作为旁注,为了使其正常工作,如果您在Visual Studio中创建C 项目,并默认情况下添加Source.cpp,则您仍然会得到未解决的外部。这是由于以下事实:虽然C源以C 代码恰好编译,但链接器将期望使用C函数的定义被填充名称。可以通过将文件编译为C代码来预防这一点,或者,最好是告诉LUA标头的名称应使用extern "C"

在链接的库中删除。
extern "C" {
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
#include <stdlib.h>
#include <stdio.h>
}