ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

centos 编译lua

2020-12-05 13:30:37  阅读:359  来源: 互联网

标签:centos .. 编译 make lua lib tolua


要编译的项目有三个: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的时候目录不同

标签:centos,..,编译,make,lua,lib,tolua
来源: https://blog.csdn.net/My__God/article/details/110678561

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有