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
上一篇下一篇

猜你喜欢

热点阅读