如何在 Lua 编译为 C++ 时使用 ZeroBrane Studio IDE 调试器
2017-11-14 7:10:53
收藏:0
阅读:159
评论:2
我已将 Lua 5.3 编译为 32 位 C++ DLL 和 exe。DLL 包含除 lua.cpp 和 luac.cpp 以外的所有 Lua 代码。exe 编译 lua.cpp 并使用 DLL 运行 Lua 解释器。当从命令行单独运行时,这可以正常工作。我希望能够使用此 DLL 和 exe 从 IDE 运行。
如果我使用我的版本替换/ZeroBraneStudio/bin/lua53.dll 和 lua53.exe,则可以运行脚本(点击两个绿箭头)。但是,调试不起作用,会出现以下错误:
在动态链接库 lua53.dll 中找不到 luaL_addlstring 过程入口点。
我可以看到这是因为调试器正在使用 luasocket。\ZeroBraneStudio\bin\clibs53\socket\core.dll 依赖于 lua53.dll,并期望其中包含已编译为 c++ 的 Lua。
那么,正确的解决方案是什么-是将 luasocket 也编译为 c++ 吗?
(如果是这样,是否有关于此的说明/指导?我找不到任何关于此的信息。)
谢谢。
点赞
用户8936842
好的,我已经成功地让它工作了。解决方案是将 luasocket 编译为 c++。在这里,我不会提供如何执行此操作的完整说明,但以下几点可能会帮助其他遇到同样问题的人:
- 从这里获取 luasocket:https://github.com/diegonehab/luasocket
- 将所有 *.c 文件重命名为 *.cpp
- 将 Lua52.props 重命名为 Lua.props(我正在使用 lua 5.3,但似乎它是兼容的?)
- 将 lua 头文件和库放在适当的文件夹中
- 在 Visual Studio 2012 中打开解决方案
- 修正项目文件的小问题,例如文件重命名。
- 在 luaopen_socket_core 和 luaopen_mime_core 函数的声明中添加 'extern "C"'(这是必需的,以便 lua 能够加载库)。
- 构建解决方案
- 将新的 dll 文件复制到 clibs53/socket 和 clibs53/mime 文件夹中。
我使用了 Dependency Walker 来帮助解决此问题。如果有人在将来需要更多详细信息,请留下评论。
2017-11-23 02:30:59
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

我不确定 DLL 是如何编译的,但错误信息可能表明
luaL_addlstring和其他函数未被导出。如果这些符号被正确导出,则应该能够加载 luasocket 并使调试正常工作。请参阅 此线程相关讨论。此外,您无需替换 lua53 库和可执行文件,因为可以使用
path.lua53配置设置来配置 IDE 使用自己的副本,如文档所述 (https://studio.zerobrane.com/doc-general-preferences#interpreter-path)。