LUA5.3 DLL文件中缺少名称
Missing names in lua5.3 dll file
在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>
}
相关文章:
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 将 dll 文件注入 UWP
- 从 .lib 文件创建一个.dll文件
- 使用dll源代码C++调试dll文件
- 如何将我的程序转换为.dll文件并使用rundll32.exe在cmd中运行它?
- 提升 Python 找不到 dll 文件
- 为什么它无法在 c++ 中全局声明一个构建为 dll 文件的类?
- 尝试在 python 中正确加载和使用 dll 文件
- 如何在运行时从 c++ 中的 DLL 文件创建对象?
- 是否可以单步执行.dll文件中定义的成员函数?
- 是否有其他方法将.dll文件从一个项目复制到我的启动项目中的可执行文件旁边
- 设置所需DLL文件的自定义路径:电子应用
- LUA5.3 DLL文件中缺少名称
- 如何在 go 中调用带有 .lib 和.dll文件的预构建 API
- 将字符串从 C# 发送到 dll 文件C++
- DLL文件中函数的预期行为在C中编写并从CPP文件打电话
- 如何在VS项目中静态链接没有dll文件的cpprest?
- 加载C DLL文件时,如何修复异常_access_violation
- 编译时如何隐藏DLL文件中的字符串?
- 找不到 C# C++ DLL 文件