centos 编译lua

要编译的项目有三个:Lua, ToLua,lfs(luafilesystem)

Lua编译

  1. 到网站https://www.lua.org/ftp/下载lua代码,github上的lua源码编译脚本不完善,很大的可能编译不成功,不想花时间研究的还是选择下载源码包吧,因要与tolua配合使用,之前使用的是5.3.5,这次还是下载5.3.5版
  2. 解压代码,进入解压出来的目录,执行make linux,报错unkown <readline/readline.h>
  3. 执行yum install readline-devel,安装readline库
  4. 再次执行make linux
  5. 执行make install 安装,否则后面编译tolua会找不到lua头文件
  6. 编译成功

ToLua编译

  1. 从地址https://hub.fastgit.org/LuaDist/tolua.git clone源码
  2. 进入tolua目录,执行make,报错:
In file included from /usr/local/include/lua.h:16:0,
                 from ../../include/tolua.h:33,
                 from tolua_event.c:19:
/usr/local/include/luaconf.h:581:2: 错误:#error "Compiler does not support 'long long'. Use option '-DLUA_32BITS'   or '-DLUA_C89_NUMBERS' (see file 'luaconf.h' for details)"
 #error "Compiler does not support 'long long'. Use option '-DLUA_32BITS' \

发现是lua头文件报错,为啥刚才编译lua没报错呢,查看luaconf.h后发现是tolua编译参数设置有问题,编译lua时LUA_INTEGER是定义为long long的,但是编译tolua是因为没有定义LLONG_MAX宏,导致LUA_INTEGER未定义,在tolua目录的config文件中的cc设置中增加宏定义LLONG_MAX

# you need an ANSI C compiler. gcc is a popular one.
CC= gcc -DLLONG_MAX
CCPP = g++
WARN= -ansi -Wall -g

再次执行make,刚才的错误已经没有了,又有了新的错误

ar rcu ../../lib/libtolua.a tolua_event.o tolua_is.o tolua_map.o tolua_push.o tolua_to.o
ar: ../../lib/libtolua.a: 没有那个文件或目录

这是是因为../../lib这个目录不存在,在tolua/src/lib目录的makefile中添加一行mkdir -p $(TOLUA)/lib,确保目录存在

$T: $(OBJS)
	mkdir -p $(TOLUA)/lib
	$(AR) $@ $(OBJS)
	$(RANLIB) $@

再次执行make,继续报错

make[1]: 进入目录“/home/mortalgod/source/tolua/src/bin”
/usr/bin/ld:无法打开输出文件 ../../bin/tolua_lua:没有那个文件或目录
collect2: 错误:ld 返回 1

这次已经进入了bin目录,估计还是目录不存在的问题,修改tolua/src/bin目录中的makefile,在两个位置都增加一行创建目录的指令:mkdir -p $(TOLUA)/bin,如下所示

$(T): $(OBJS)
	mkdir -p $(TOLUA)/bin
	$(CC) -o $@ $(OBJS) $(LIB) -ltolua -llua -lm

toluabind.c: $(T_D)
	$(T_D) -o toluabind.c tolua.pkg

$(T_D): $(OBJS_D)
	mkdir -p $(TOLUA)/bin
	$(CC) -o $@ $(OBJS_D) $(LIB) -ltolua -llua -lm

再次make,还报错

gcc -DLLONG_MAX -o ../../bin/tolua_lua tolua_lua.o -L../../lib -L/usr/local/lib -ltolua -llua -lm
/usr/local/lib/liblua.a(loadlib.o):在函数‘lookforfunc’中:
loadlib.c:(.text+0x4c2):对‘dlsym’未定义的引用
loadlib.c:(.text+0x509):对‘dlerror’未定义的引用
loadlib.c:(.text+0x536):对‘dlopen’未定义的引用
loadlib.c:(.text+0x5ad):对‘dlerror’未定义的引用
/usr/local/lib/liblua.a(loadlib.o):在函数‘gctm’中:
loadlib.c:(.text+0x741):对‘dlclose’未定义的引用

再次修改tolua/config文件,在cc定义中增加-ldl

# you need an ANSI C compiler. gcc is a popular one.
CC= gcc -DLLONG_MAX -ldl
CCPP = g++
WARN= -ansi -Wall -g

再次make,成功

LuaFileSystem编译

  1. https://gitee.com/mirrors/luafilesystem.git clone代码
  2. 进入luafilesystem目录,执行make
  3. 成功了,顺利的有点儿不习惯了都,他这里默认的lua配置是5.1,我改成5.3又make了一遍,不过看起来没啥影响,只有install的时候目录不同
上一篇:ToLua学习笔记三——toLua解析器自定义解析方式


下一篇:Cocos2dLua3.17.2集成FairyGUI之 lua绑定 setHook()回调问题(四)