我已经将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。
我可以看到,之所以会发生这种情况,是因为调试器正在使用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来帮助解决这个问题。如果有人想在未来了解更多细节,请留下评论。