lua 编译为 c++ 时如何使用 ZeroBrane Studio IDE 调试器

How to use ZeroBrane Studio IDE debugger when lua is compiled as c++

我已将 Lua 5.3 编译为 32 位 c++ DLL 和 exe。 DLL 包含除 lua.cpp 和 luac.cpp 之外的所有 lua 代码。 exe 编译 lua.cpp 并将 DLL 用于 运行 lua 解释器。当 运行ning 从命令行单独运行时,这工作正常。我希望能够使用此 DLL 和 exe 从 IDE 运行。

如果我用自己的版本替换 /ZeroBraneStudio/bin/lua53.dlllua53.exe,我可以 运行 脚本(单击两个绿色箭头)。但是,调试不起作用,出现以下错误:

The procedure entry point luaL_addlstring could not be located in the dynamic link library lua53.dll.

我可以看到这是因为调试器正在使用 lua套接字。 \ZeroBraneStudio\bin\clibs53\socket\core.dll 依赖于 lua53.dll,并期望它包含编译为 c.

的 lua

那么,正确的解决方案是什么 - 是否也将 luasocket 编译为 c++?

(而且,如果是这样,有人 instructions/guidance 这样做吗?我一直找不到这方面的任何信息。)

谢谢。

我不确定 DLL 是如何编译的,但错误消息可能表明 luaL_addlstring 和其他函数未由它导出。如果符号导出正确,您应该能够加载 luasocket 并进行调试。参见 this thread for the related discussion

此外,您不需要替换 lua53 库和可执行文件,因为您可以使用 path.lua53 配置设置将 IDE 配置为使用您自己的副本,如 documentation.

好的,我可以让它工作了。解决方案是将 luasocket 编译为 c++。我不会在这里给出有关如何执行此操作的完整说明,但希望能帮助其他遇到相同问题的人:

  • 从这里得到 luasocket:https://github.com/diegonehab/luasocket
  • 将所有 *.c 文件重命名为 *.cpp
  • 已将 Lua52.props 重命名为 Lua.props(我正在使用 lua 5.3,但似乎兼容?)
  • 已将 lua headers 和库放在适当的文件夹中
  • 2012 年 Visual Studio 打开解决方案
  • 修复了项目文件的小问题,例如文件重命名。
  • 在 luaopen_socket_core 和 luaopen_mime_core 函数的声明中添加了 'extern "C"'(lua 加载库所必需的)。
  • 内置解决方案
  • 已将新的 dll 复制到 clibs53/socket 和 clibs53/mime 文件夹中。

我使用 Dependency Walker 来帮助解决这个问题。如果以后有人想了解更多详情,请发表评论。