【问题标题】:How to compile srlua (or a link to the binaries)如何编译 srlua(或二进制文件的链接)
【发布时间】:2021-07-06 12:55:34
【问题描述】:

相关:
How to compile srlua?
How do I Make an executable Lua script using srlua?

第一个链接是我在这里提出的确切问题。但是,唯一的答案并不令人满意,因为它假设了多种情况,即 OP 已经在使用 Cmake(OP 对答案的评论反驳了这一事实)。第二个链接似乎已经是教程的大部分内容,虽然提供了指向 srlua.exe 和 srglue.exe 的预编译二进制文件的链接,但该链接不再包含二进制文件,而是包含源代码。

我在不同的网站上发现了其他几个主题,它们都在问同样的问题,但它们都假设您基本上已经知道如何做,或者什么也不解释(很多都有可能有用的链接,但它们已经过时且不再有效) .

我已经尝试编译 srlua,得到了一个 srglue.exe,但是当我尝试 srlua.c 时,我得到了一个未定义的引用列表(例如“lua_type”或“lua_getfield”)。

lua_getfield,  lua_type,  lua_settop,  lua_getfield,  lua_type,  lua_settop,  lua_pushstring,  lua_pushinteger,  lua_call,  lua_pushfstring,  lua_load,  lua_tolstring,  lua_tointeger,  lua_touserdata,  luaL_openlibs,  lua_createtable,  lua_pushstring,  lua_rawseti,  lua_setfield,  luaL_checkstack,  lua_pushstring,  lua_call,  lua_tolstring,  luaL_callmeta,  lua_type,  lua_type,  lua_typename,  lua_pushfstring,  luaL_newstate,  lua_pushcclosure,  lua_pushcclosure,  lua_pushinteger,  lua_pushlightuserdata,  lua_pcall,  lua_tolstring,  lua_close

我的问题是:
如何使用 C 编译器(我知道 gcc 的基础知识)专门编译 srlua?或者,如果有人有指向预编译二进制文件的有效链接或编译二进制文件的工具,他们可以分享吗?

重要提示:我在 Windows 上。因此,我不能只使用make。我必须实际将 .c 文件编译为 .exe 文件。我在问怎么做。如果您只是提供指向具有上述问题的线程的链接,那么您将无济于事。如果您给出的答案假定您对没有良好文档的特定工具有深入的先验知识,那么您将无济于事。如果您告诉我要使用的工具,而不是编译 srlua 的具体过程,那么您将无济于事。如果有更好的地方,请告诉我,我可以把它移到那里。

【问题讨论】:

  • 您需要将 srlua.obj 与 Lua 库链接。如果您将 Lua 库作为 DLL,您可能需要将该 DLL 放在同一个文件夹中。很抱歉,我无法为您提供更准确的 Windows 说明。
  • 我没有 srlua.obj。我应该用 srlua.c 来做吗?
  • 你使用的是什么 gcc 命令行?
  • 我使用的是 TDM-GCC(不是 Mingw)。

标签: windows lua compilation


【解决方案1】:

我不知道任何用于 srLua 的 Windows 预编译二进制文件。

要编译 srLua,你应该先安装 Mingw 编译器来使用 GCC 作为 C 编译器:你可以安装 TDM-GCC (https://jmeubank.github.io/tdm-gcc) 或 http://winlibs.com

然后您可以打开控制台提示。输入“gcc”命令以确保编译器正在工作(并且正确设置了 PATH)。

然后进入你解压srLua源文件的目录,输入命令:

mingw32-make

交叉你的手指,它应该编译所有内容:)

链接时,您应该使用 -l 开关包含 Lua 库:例如 -llua54 用于 Lua 5.4 库。

【讨论】:

  • 好的,所以当我执行mingw-make ./srglue 时,我得到了 srglue.exe。一切都很好。但是,对./srlua 执行相同操作会导致我之前遇到的相同错误(未定义的引用)。我不想手动将所有数百个 Lua 库文件(其中许多具有冲突的名称)复制到我的 srlua 目录中,也不想链接每个文件,那么 Makefile 中有没有办法链接到库?我已经编辑了 Makefile 给它我的 Lua 目录并复制了所有的 /lib 和 /include。
  • 你是对的。提供的 Makefile 仅针对 Unix 系统,因此出现错误。您必须使用解压缩 Lua 存档的路径修改 LUA= 行。然后删除 LIBS= 行上的 -ldl 开关并将 -llua 替换为 -llua54。最后删除 chmod +x 行、clean 行和 rm 行。
  • 即使在所有这些步骤之后(我已经纠正了路径),我也会得到相同的“未定义引用”错误。会不会是安装“功能”的问题?
【解决方案2】:

我在 webarchive 上发现了这个已经编译好的版本,它有点旧但可以工作: https://web.archive.org/web/20130721014948/http://www.soongsoft.com/lhf/lua/5.1/srlua.tgz

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • 谢谢!我认为上面的评论是自动化的,因为评论是一种变通方法,而且问题似乎无法解决。
猜你喜欢
  • 2018-05-18
  • 2012-02-13
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 2012-03-08
相关资源
最近更新 更多