0

我已将 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。

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

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

(如果是这样,是否有人有这样做的说明/指导?我一直无法找到任何关于此的内容。)

谢谢。

4

2 回答 2

0

Okay, I was able to get it working. The solution was to compile luasocket as c++. I won't give full instructions on how to do this here, but some points to hopefully help anybody else with the same issue:

  • Got luasocket from here: https://github.com/diegonehab/luasocket
  • Renamed all *.c files to *.cpp
  • Renamed Lua52.props to Lua.props (I am using lua 5.3 but seems like it is compatible?)
  • Placed lua headers and lib in appropriate folders
  • Opened solution in Visual Studio 2012
  • Fixed up minor issues with project files, like the renaming of the files.
  • Added 'extern "C"' to declaration of luaopen_socket_core and luaopen_mime_core functions (necessary for lua to be able to load libraries).
  • Built solution
  • Copied new dlls into clibs53/socket and clibs53/mime folders.

I used Dependency Walker to help with this. If anybody wants further details in the future please leave a comment.

于 2017-11-23T02:30:59.603 回答
0

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

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

于 2017-11-14T16:55:47.347 回答