使用 Lua 在 Love2D 中需要一个共享对象 (.so) 文件

Posted

技术标签:

【中文标题】使用 Lua 在 Love2D 中需要一个共享对象 (.so) 文件【英文标题】:Requiring a shared object (.so) file in Love2D with Lua 【发布时间】:2021-10-29 21:57:36 【问题描述】:

最近,我想做一个Love2D 游戏并在Steam 上发布。我环顾互联网,发现luasteam。 luasteam 的作用是为 Steam API 创建 lua 绑定。 Luasteam,至少对于 Linux,是随共享对象 (.so) 文件一起分发的。当我尝试要求它时(它与我的main.lua 在同一个文件夹中),使用Steam = require('luasteam') 然后运行love <FolderName>,它不起作用。我收到一条错误消息。

问题是,当我在项目文件夹中运行 love ../<FolderName> 时,它可以工作。

现在您可能会问,“为什么不一直这样做?”。这是因为像我上面那样运行它只是一个快速修复。当您将游戏设为 .love 文件时,它会按照我之前向您展示的方式运行并显示与之前相同的错误:

我尝试更改package.cpath,但无济于事。有什么办法可以解决这个问题?

【问题讨论】:

【参考方案1】:

您没有指定如何您尝试更改 package.cpath,因此很难说出了什么问题,但您需要做的是以允许的方式进行设置luasteam.so 相对于 Lua 解释器(嵌入在 Love 可执行文件中)的启动位置。

love ../<FolderName> 有效,因为您可能将luasteam.so 放入您的项目文件夹中,所以它被发现为./luasteam.so。如果您想让love <FolderName> 工作,您需要将<FolderName>/?.so 包含在您的package.cpath 中。在require "luasteam" 之前尝试添加以下行:

package.cpath = package.cpath..";<FolderName>/?.so"

【讨论】:

以上是关于使用 Lua 在 Love2D 中需要一个共享对象 (.so) 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用lua语言制作贪吃蛇游戏(love2d)蛇对象的设计

love2d(lua)中的碰撞检测

如何在 Lua (Love2D) 的库中定义一个类?

Lua,Love2d,不同文件夹下两个类名相同的游戏

如何让子弹出现在屏幕上(Lua、Love2D)

在love2d中以随机时间间隔调用lua函数