安装lua环境:
lua安装包下载地址: http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make linux test
make install
问题一:
报lua.c:67:31: fatal error: readline/readline.h: No such file or directory
解决:
说明缺少libreadline依赖包
下载readline-6.2.tar.gz
wget -c ftp://ftp.gnu.org/gnu/readline/readline-6.2.tar.gz
放到某个目录下,如/usr/local/
并解压出来 tar xzvf readline-6.2.tar.gz
进入源码目录 cd /usr/local/readline-6.2
执行./configure 生成针对系统环境的编译文件Makefile,里面有编译后.a .so include等所要放置的位置及ln链接等操作
编译和安装
make && make install
安装完成后能看到静态库 动态库 头文件已经放置到既定位置
/usr/local/lib/libreadline.a
/usr/local/lib/libreadline.so
/usr/local/include/readline/
再去编译lualua就能顺利完成了。
问题二:依赖ncurses
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lua.o lua.c
gcc -std=gnu99 -o lua lua.o liblua.a -lm -Wl,-E -ldl -lreadline
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so when searching for -lreadline
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.a(display.o): In function cr':<br/>(.text+0x1ed): undefined reference to
tputs'
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.a(display.o): In function _rl_move_vert':<br/>(.text+0x31f): undefined reference to
tputs'
解决:
由于lua编译依赖readline库,而其依赖ncurses库,但没有指定,所以出现“未定义的符合引用”错误。需要修改${LUA_DIR}/src/Makefile中linux编译target,在SYSLIBS变量中追加‘-lncurses’选项即可。修改后,如下:
问题三:
安装完之后,系统将程序安装在制定的build目录下build=/home/lua/lua-5.3.0/src/
可以看到该目录下有个lua.h的头文件和lua的可执行程序,可以运行lua这个命令进入lua行解析状态,进行一个软连接处理,将lua.h和lua链接到 /usr/include 和/usr/bin/ 目录下
cd /usr/include
ln -s /home/lua/lua-5.3.0/src/lua.h lua.h
cd /usr/bin/
ln -s /home/lua/lua-5.3.0/src/lua lua