要编译的项目有三个:Lua, ToLua,lfs(luafilesystem)
Lua编译
- 到网站https://www.lua.org/ftp/下载lua代码,github上的lua源码编译脚本不完善,很大的可能编译不成功,不想花时间研究的还是选择下载源码包吧,因要与tolua配合使用,之前使用的是5.3.5,这次还是下载5.3.5版
- 解压代码,进入解压出来的目录,执行make linux,报错unkown <readline/readline.h>
- 执行yum install readline-devel,安装readline库
- 再次执行make linux
- 执行make install 安装,否则后面编译tolua会找不到lua头文件
- 编译成功
ToLua编译
- 从地址https://hub.fastgit.org/LuaDist/tolua.git clone源码
- 进入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编译
- 从https://gitee.com/mirrors/luafilesystem.git clone代码
- 进入luafilesystem目录,执行make
- 成功了,顺利的有点儿不习惯了都,他这里默认的lua配置是5.1,我改成5.3又make了一遍,不过看起来没啥影响,只有install的时候目录不同