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



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

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

在动态链接库lua53.dll中找不到过程入口点luaL_addlstring。

我可以看到,之所以会发生这种情况,是因为调试器正在使用luaseocket。ZeroBraneStudiobinclibs53socketcore.dll依赖于lua53.dll,并且期望它包含编译为c.的lua

那么,解决这个问题的正确方法是什么呢?是把luaseocket也编译成c++吗?

(如果是,有人有这样做的指示/指导吗?我找不到任何关于这方面的信息。)

谢谢。

我不确定DLL是如何编译的,但错误消息可能表明luaL_addlstring和其他函数没有被它导出。如果符号导出正确,你应该能够加载luaseocket并进行调试。有关讨论,请参阅此线程。

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

好吧,我能让它工作了。解决方案是将luaseocket编译为c++。我不会在这里给出如何做到这一点的完整说明,但希望能帮助其他人解决同样的问题:

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

我使用了Dependency Walker来帮助解决这个问题。如果有人想在未来了解更多细节,请留下评论。

相关内容

  • 没有找到相关文章

最新更新