pl/lua安装
2020-06-28 本文已影响0人
遥想公瑾当年
背景:《使用pl/lua写存储过程提升10倍性能》文章阐述了一个使用lua的新思路,感觉很好,想测试下,但是安装遇到不少坑,经过努力解决这些问题,本文总结。
一 安装lua-3.5
cd /opt
wget http://www.lua.org/ftp/lua-5.3.5.tar.gz
tar xvf lua-5.3.5.tar.gz
安装lua比较简单,但是存在如下问题:
1 一般操作系统会有装lua低版本5.1,为了不冲突,需要把5.3.5安装到指定目录下比较方便管理。
2 pl/lua需要生成liblua.so动态库,但是默认安装不会生成。
3 默认的编译出来的lua再编译选项中没有加“-fPIC”,会导致我们后面编译pllua时报错:
/usr/bin/ld: /usr/local/lib/liblua.a(loadlib.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
为此,我们需要修改lua的编译文件,这涉及lua-5.3.5/MakeFile与lua-5.3.5/src/MakeFile两个编译文件。
1 编译加-fPIC与生成liblua.so需要修改lua-5.3.5/src下的MakeFile文件:
# 修改CFLAGS编译参数
# 原:CFLAGS= -O2 -Wall -Wextra -DLUA_COMPAT_5_2 $(SYSCFLAGS) $(MYCFLAGS)
# 修该为如下:
CFLAGS= -fPIC -O2 -Wall -Wextra -DLUA_COMPAT_5_2 $(SYSCFLAGS) $(MYCFLAGS)
# 修改使其支持liblua.so生成
# 新增LUA_SO
LUA_SO=liblua.so
# 修改ALL_T,结尾加$(LUA_SO)
ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO)
# 新增,换行后的$(CC)前面是tab键后形成的空格
$(LUA_SO): $(CORE_O) $(LIB_O)
$(CC) -o $@ -shared $? -ldl -lm
2 修改lua-5.3.5下的MakeFile文件,主要修改安装路径:
# 原:INSTALL_TOP= /usr/local
# 修改为:
INSTALL_TOP= /usr/local/lua-5.3.5
3 执行lua安装
cd /opt/lua-5.3.5
make linux test
make install
4 修改环境变量并验证
vi /etc/profile
# 新增lua相关
export LUA_HOME=/usr/local/lua-5.3.5
# 系统原有的PATH参数后追加,这里简写,只写了自己的lua的bin
export PATH=$LUA_HOME/bin:$PATH
# 更新环境变量
source /etc/profile
# 查看lua版本
lua -v
Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio
lua安装完成了。
二 安装pl/lua
下载安装介质:
cd /opt
git clone https://github.com/pllua/pllua-ng.git
pl/lua也要修改,原因是pl/lua的MakeFile里很多lua指定了版本号和安装路径,需要手动修改下:
cd pllua-ng
vi Makefile
# General
#原: LUA_INCDIR ?= /usr/local/include/lua53
LUA_INCDIR ?= /usr/local/lua-5.3.5/include/lua
#原: LUALIB ?= -L/usr/local/lib -llua-5.3
LUALIB ?= -L/usr/local/lua-5.3.5/lib -llua
# 原: LUAC ?= luac53
LUAC ?= luac
#原: LUA ?= lua53
LUA ?= lua
保存后退出。
安装pl/lua:
cd pllua-ng
# 指定自己安装的pg的pg_config位置。
make PG_CONFIG=/home/postgres/bin/pg_config
make PG_CONFIG=/home/postgres//bin/pg_config install
创建扩展:
psql -d test
test=# create extension pllua;
CREATE EXTENSION