很多arm-linux需要用到lua,但是lua默认只包含linux下的编译,这里需要根据交叉编译器修改编译文件Makefile,交叉编译lua。我从网上找了一些方法,但是发现都无法完全解决,或者不算完整,因此在这里做一下记录:
1、首先需要下载lua安装包,免费下载地址(我看了下在其他CSDN资源上要收7分的):http://www.tecgraf.puc-rio.br/lua/ftp/lua-5.2.0.tar.gz
2、解压lua-5.2.0.tar.gz,在文档中会有以下文件
root@ubuntu:/home/yao/share/lua-5.2.0# ls
Makefile Makefile~ README doc src
我们可以看到这里有个Makefile文件,然后在src文件路径下,其实还有一个Makefile文件,这里要区分清楚,这两个Makefile对我们后面的交叉编译都有影响。
3、修改Makefile文件
3.1 我们首先打开在/lua-5.2.0路径下的Makefile文件,在文件的前面部分会有相关配置如下:
INSTALL_TOP= /usr/local
INSTALL_BIN= $(INSTALL_TOP)/bin
INSTALL_INC= $(INSTALL_TOP)/include
INSTALL_LIB= $(INSTALL_TOP)/lib
INSTALL_MAN= $(INSTALL_TOP)/man/man1
INSTALL_LMOD= $(INSTALL_TOP)/share/lua/$V
INSTALL_CMOD= $(INSTALL_TOP)/lib/lua/$V
以上信息表示我们lua编译安装后,将生成的头文件,库文件等分别放到 /usr/local/bin等 路径下相关路径里面。我们可以根据我们实际需求修改路径,以满足我们自己的需求,如下就是我修改后的路径设置,我将安装路径修改到根目录中 fsu文件夹里面。
# Makefile for installing Lua
# See doc/readme.html for installation and customization instructions.
# == CHANGE THE SETTINGS BELOW TO SUIT YOUR ENVIRONMENT =======================
# Your platform. See PLATS for possible values.
PLAT= none
# Where to install. The installation starts in the src and doc directories,
# so take care if INSTALL_TOP is not an absolute path. See the local target.
# You may want to make INSTALL_LMOD and INSTALL_CMOD consistent with
# LUA_ROOT, LUA_LDIR, and LUA_CDIR in luaconf.h.
#INSTALL_TOP= /usr/local #
#INSTALL_BIN= $(INSTALL_TOP)/bin #可执行文件放置此
#INSTALL_INC= $(INSTALL_TOP)/include #头文件
#INSTALL_LIB= $(INSTALL_TOP)/lib #库文件
#INSTALL_MAN= $(INSTALL_TOP)/man/man1
#INSTALL_LMOD= $(INSTALL_TOP)/share/lua/$V
#INSTALL_CMOD= $(INSTALL_TOP)/lib/lua/$V
INSTALL_TOP= /fsu
INSTALL_BIN= $(INSTALL_TOP)/bin
INSTALL_INC= $(INSTALL_TOP)/include
INSTALL_LIB= $(INSTALL_TOP)/lib
INSTALL_MAN= $(INSTALL_TOP)/man/man1
INSTALL_LMOD= $(INSTALL_TOP)/lua/$V
INSTALL_CMOD= $(INSTALL_TOP)/lua/$V
# How to install. If your install program does not support "-p", then
# you may have to run ranlib on the installed liblua.a.
3.2 第二个Makefile文件也需要做部分修改
默认情况下,这个Makefile文件开头是这样的
这里,我们只需要将这里gcc需要替换为我们对应交叉编译工具 ,比如arm-linux-gnueabi-gcc
# Makefile for building Lua
# See ../doc/readme.html for installation and customization instructions.
# == CHANGE THE SETTINGS BELOW TO SUIT YOUR ENVIRONMENT =======================
# Your platform. See PLATS for possible values.
PLAT= none
CC= arm-linux-gnueabi-gcc
CFLAGS= -O2 -Wall -DLUA_COMPAT_ALL $(SYSCFLAGS) $(MYCFLAGS)
LDFLAGS= $(SYSLDFLAGS) $(MYLDFLAGS)
LIBS= -lm $(SYSLIBS) $(MYLIBS)
AR= ar rcu
RANLIB= ranlib
RM= rm -f
SYSCFLAGS=
SYSLDFLAGS=
SYSLIBS=
MYCFLAGS=
MYLDFLAGS=
MYLIBS=
MYOBJS=
文件再往下拉linux:目标,把后面的-lreadline -lncurses两个库连接去掉
generic: $(ALL)
linux:
$(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline -lncurses"
macosx:
$(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_MACOSX" SYSLIBS="-lreadline"
修改为:
linux:
$(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl"
4、编译安装lua
上面的两个Makefile文件修改过后,我们可以对lua进行编译安装了。
首先执行make linux,系统会进行正常编译。
然后执行make install进行安装。
如此我们移植arm-linux环境的lua已经安装完成。