linux下安装lua

下载lua源码,编译,安装

wget -c https://www.lua.org/ftp/lua-5.3.4.tar.gz

tar -zxvf lua-5.3.4.tar.gz

cd lua-5.3.4

make linux

这时候遇到了问题

gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lua.o lua.c
lua.c:80:31: 错误:readline/readline.h:没有那个文件或目录
lua.c:81:30: 错误:readline/history.h:没有那个文件或目录
lua.c: 在函数‘pushline’中:
lua.c:312: 警告:隐式声明函数‘readline’
lua.c:312: 警告:赋值时将整数赋给指针,未作类型转换
lua.c: 在函数‘loadline’中:
lua.c:377: 警告:隐式声明函数‘add_history’

问题是因为缺少readline库,下载安装readline

yum install readline-devel

或者

wget -c ftp://ftp.gnu.org/gnu/readline/readline-7.0.tar.gz

tar -zxvf readline-7.0.tar.gz

cd readline-7.0.tar.gz

./configure

make && make install

然后回到lua的src目录下,再次make linux,上面的错误如果还是存在,这个和刚才安装的readline的位置有关系。

修改src/Makefile

MYCFLAGS=-I/SERVICE/xunYu/workspace
MYLDFLAGS=-L/SERVICE/xunYu/workspace/readline/shlib

保存退出后到lua的src下,再次make linux,出现下面的错误

gcc -std=gnu99 -o lua -L/SERVICE/xunYu/workspace/readline/shlib lua.o liblua.a -lm -Wl,-E -ldl -lreadline
/SERVICE/xunYu/workspace/readline/shlib/libreadline.so: undefined reference to `PC'
/SERVICE/xunYu/workspace/readline/shlib/libreadline.so: undefined reference to `tgetflag'
/SERVICE/xunYu/workspace/readline/shlib/libreadline.so: undefined reference to `tgetent'
/SERVICE/xunYu/workspace/readline/shlib/libreadline.so: undefined reference to `UP'
/SERVICE/xunYu/workspace/readline/shlib/libreadline.so: undefined reference to `tputs'
/SERVICE/xunYu/workspace/readline/shlib/libreadline.so: undefined reference to `tgoto'
/SERVICE/xunYu/workspace/readline/shlib/libreadline.so: undefined reference to `tgetnum'
/SERVICE/xunYu/workspace/readline/shlib/libreadline.so: undefined reference to `BC'
/SERVICE/xunYu/workspace/readline/shlib/libreadline.so: undefined reference to `tgetstr'

原因:lua编译依赖readline库,而其依赖ncurses库,但没有指定,所以出现“未定义的符合引用”错误。需要修改readline/src/Makefile中linux编译target,在SYSLIBS变量中追加‘-lncurses’选项即可。修改后,如下

linux:
$(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline -lncurses"

再次编译,如果还是不行,看看是不是ncurses-devel没有安装,安装ncurses-devel

wget -c ftp://ftp.gnu.org/gnu/ncurses/ncurses-6.0.tar.gz

tar -zxvf ncurses-6.0.tar.gz

cd ncurses-6.0

./configure

make && make install

然后到lua的src下,再次make linux,成功

make install

lua -v查看lua的版本,结果出现下面的问题

lua: error while loading shared libraries: libreadline.so.6: cannot open shared object file: No such file or directory

解决方法:

把刚才安装的libreadline.so.7所在lib位置加入到/etc/ld.so.conf文件当中。

或者

查看/usr/local/lib下是否存在libreadline.so.6,如果不存在创建一个链接,libreadline.so.7在你刚才安装readline目录下shlib下,我的是/usr/local/readline-7/shlib

ln -s /usr/local/readline-6.2/shlib/libreadline.so.7 libreadline.so.6

然后/etc/ld.so.conf中加入/usr/local/lib这一行,一般都可以解決此问题,不仅仅是对于libreadline.so.5,大部分的so都存在这/usr/local/lib这个目录里面

最后将/etc/ld.so.conf保存后,还要执行ldconfig 才会使更改生效



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值