在iPhone上使用Lua?

15

我正在尝试在iPhone上使用Lua。在Mac OS X的普通(非iOS)Cocoa应用程序中,我使用了以下代码:

lua_State* l;
l = lua_open();
luaL_openlibs(l);
luaL_loadstring(l, "print(\"Hi from Lua\");");
lua_pcall(l, 0, 0, 0);

我从lua.org/ftp下载了Lua 5.1.4并编译了Mac OS X版本。 在Xcode项目中,我使用"添加现有框架"来添加liblua.a,并使用"添加现有文件"来添加包含目录。

这个方法像预期的一样工作,并打印出字符串:"Hi from Lua"。 当我在iOS项目中尝试同样的事情时,它会产生错误:

"_luaL_newstate", referenced from:
_main in main.o
more of the same thing...
symbol(s) not found
collect2: ld returned 1 exit status

看起来 .a 文件没有链接到 iPhone 应用程序中。 有人知道如何解决这个问题吗?

(顺便说一句,我并不在意如果我的应用程序中有 Lua,苹果可能不会接受它。)


2
我认为如果你在其中使用Lua,苹果不会拒绝。这是个好主意。 - Kekoa
似乎苹果正在软化对于iOS应用内嵌解释器的立场;请参见http://www.appleoutsider.com/2010/06/10/hello-lua/。 - James Webster
3个回答

19
你需要为ARM编译Lua .a,而不是Intel。如果Lua库使用autoconf,你可以使用我最喜欢的iphone/autoconf builder:build_for_iphoneos。如果它不是autoconf,那么你可以使用该脚本来了解如何攻击它。有时你可以只构建一个Static Library Xcode项目,把所有文件都倒进去然后点击构建。如果构建足够简单,大部分工作都会自动完成。
我知道对你的用途来说这并不重要,但基于Lua的工具通常可以在应用商店上发布。你只是不能在运行时下载任意代码并解释它。

10
Lua应该写作Lua而非大写的LUA。另外,Lua并没有使用autoconf。 - Javier
5
非常感谢,为ARM编译成功了。我所做的只是将源代码文件夹放入Xcode项目中,创建了一个静态库目标,并将所有.h和.c文件放入该目标的“编译源”文件夹中,然后我就得到了可用的库。 - InFreefall
你可能想要让下载链接更加明显一些 :) 不过还是谢谢! - Ivan Vučica
1
像大多数名称一样,它应该用小写字母和首字母大写来书写,即“Lua”。请不要将其写成“LUA”,这既难看又令人困惑,因为它会变成一个缩写词,对不同的人有不同的含义。所以,请正确地写出“Lua”! - johnsyweb

14

你可能想要查看 iPhone Wax。它是一个lua/iPhone桥接器,可以让你用纯lua编写原生的iPhone应用程序!这里有一篇非常好的教程


4
如果您想为iOS编写Lua代码,那么请立即查看MOAI:http://getmoai.com/。这是一个非常好用的框架,可以用于在iOS和Android以及Windows和OSX上开发游戏。它不仅提供了如何在跨平台环境下正确实现基于Lua-VM的脚本托管环境的很好思路,从MOAI上可以学到很多。我已经使用MOAI做了4个游戏,而且还不打算停止... MOAI绝对很棒!
此外,还可以查看LOAD81,这是类似的尝试,只不过其目标环境为SDL:http://github.com/antirez/load81
(我对LOAD81项目做出了一点贡献,特别是为OpenPandora社区提供了一些有趣或有价值的功能。MOAI更商业化,LOAD81更侧重于爱好者。)
对于那些尝试学习Lua和集成Lua VM的不同方法以在多个平台目标中进行项目开发的人来说,MOAI和LOAD81都可以提供许多有关正确方法的背景知识和线索。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接