妖怪的文章,用作参考:http://dualface.qeeplay.com/index.php/archives/1415
原文如下:
由于 OS X 是 64bit 操作系统,所以默认情况下编译出来的 Lua 是 64bit 的。一般应用不会有任何问题,但使用 luac 编译源代码后得到的字节码就只能在 64bit 操作系统中使用。
我使用 Lua 的主要目的是在 iOS/Android 环境中简化游戏开发,因此必须在 OS X 中编译出 32bit 的 Lua 及相关库。
下载 lua 5.1.4 源代码和 5.1.4-3 patch:
- $ wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
- $ tar zxf lua-5.1.4.tar.gz
- $ wget -O lua-5.1.4-3.patch http://www.lua.org/ftp/patch-lua-5.1.4-3
- $ cd lua-5.1.4/src
- $ patch < ../../lua-5.1.4-3.patch
编辑 lua-5.1.4/src/Makefile,将:
- macosx:
- $(MAKE) all MYCFLAGS=-DLUA_USE_LINUX MYLIBS="-lreadline"
改为:
- macosx:
- $(MAKE) all MYCFLAGS="-DLUA_USE_LINUX -arch i386" MYLIBS="-lreadline -arch i386"
最后:
- $ cd lua-5.1.4
- $ make macosx
- $ sudo make install
- cd src && mkdir -p /usr/local/bin /usr/local/include /usr/local/lib /usr/local/man/man1 /usr/local/share/lua/5.1 /usr/local/lib/lua/5.1
- cd src && install -p -m 0755 lua luac /usr/local/bin
- cd src && install -p -m 0644 lua.h luaconf.h lualib.h lauxlib.h ../etc/lua.hpp /usr/local/include
- cd src && install -p -m 0644 liblua.a /usr/local/lib
- cd doc && install -p -m 0644 lua.1 luac.1 /usr/local/man/man1
下载 LuaSocket 2.0.2:
- $ wget http://files.luaforge.net/releases/luasocket/luasocket/\
- luasocket-2.0.2/luasocket-2.0.2.tar.gz
- $ tar zxf luasocket-2.0.2.tar.gz
- $ cd luasocket-2.0.2
打开 config 文件,修改为(使用 Mac OS X 的设定,并指定 32bit 架构):
- LUAINC=-I/usr/local/include/lua5.1
- #------
- # Compiler and linker settings
- # for Mac OS X
- #
- CC=gcc
- DEF= -DLUASOCKET_DEBUG -DUNIX_HAS_SUN_LEN
- CFLAGS= $(LUAINC) -I$(COMPAT) $(DEF) -pedantic -Wall -O2 -fno-common -arch i386
- LDFLAGS=-bundle -undefined dynamic_lookup -arch i386
- LD=export MACOSX_DEPLOYMENT_TARGET="10.7"; gcc
- #------
- # Compiler and linker settings
- # for Linux
- #CC=gcc
- #DEF=-DLUASOCKET_DEBUG
- #CFLAGS= $(LUAINC) $(DEF) -pedantic -Wall -O2 -fpic
- #LDFLAGS=-O -shared -fpic
- #LD=gcc
最后编译安装即可:
- $ make
- $ sudo make install
如果你不是特别需要安装32位的lua,那么妖怪那段增加 -arch i386这一段的内容就可以不需要改动了。嗯。就是这样简单。
但真的这样吗?NND,事实上我在按照上面操作的时候,告诉我wget这个函数不存在,我晶啊,wget居然不是标配。
最后只能用curl解决了这个问题,把wget http://xxxx.xxx/xxx.xxx.gz 改为:curl http://xxx.xxx/xxx.gz -O xxx.gz,OK,就完成了。。
然后利用这样的操作也下载了一份wget,搞定。还是wget更方便,因为它很简单。。。