提取luasql中postgres部分

项目后期需要使用postgresql数据库存储冷数据,需要引入一个外部库连接数据库。

因为要对lua支持,所以采用lua官方的库,但是又不需要它全部的功能所以只使用了postgres部分编译成动态库。

  1. 项目环境ubuntu,先下载依赖库sudo apt-get install libpq-dev,下载postgres数据库sudo apt-get install postgresql。
  2. 下载luasql,git clone https://github.com/keplerproject/luasql.git,下拉一份源码下来。
  3. 在下拉的文件夹中提取出config、MakeFile和src目录中的luasql.h、luasql.c、ls_postgres.c文件,本来想整合源码文件到一个文件中,但由于能力和后续可能这个库的更新,就采取了保持原来的结构,如果以后有更新可以覆盖在重新编译就可以了。
  4. 合并config和MakeFile文件,提取其中对postgres编译的部分,在合并的时候出现很多问题,1)依赖的问题,不太明白文件和库之间的依赖关系2)编译成功以后在lua中调用的时候出现undefined symbol有些函数出现未定义的问题,后来发现是编译动态库的时候编译命令出现问题,未把需要的.o文件加入到编译.so文件的命令中。
  5. 在连接数据库之前先设置一个密码,登录数据库sudo -u postgres psql,命令\password设置密码。psql -U postgres -d test -h 127.0.0.1 -p 5432也可以这样登录。

以下是修改后的luasql中的MakeFile文件

# Lua dirs
LUA_INC ?= lua目录

LIB_OPTION ?= -shared

# - PostgreSQL 头文件和依赖的库
DRIVER_LIBS ?= -L/usr/lib -lpq
DRIVER_INCS ?= -I/usr/include/postgresql

# general compilation parameters
WARN = -Wall -Wmissing-prototypes -Wmissing-declarations -pedantic
INCS = -I$(LUA_INC)
CFLAGS = -O2 -std=gnu99 $(WARN) -fPIC $(INCS)
CC= gcc

OBJS= luasql.so
SRCS= ls_postgres.c

# builds the postgresql driver
$(OBJS) : $(SRCS) luasql.o
$(CC) $(CFLAGS) ls_postgres.c -o $@ $(LIB_OPTION) luasql.o $(DRIVER_INCS) $(DRIVER_LIBS)

luasql.o : luasql.h luasql.c
$(CC) $(CFLAGS) -c luasql.c

clean:
rm -f *.so *.o

以上只是记录下,还得学习makefile语法和熟悉postgres库的具体接口。

posted @ 2017-09-01 17:29  HYXUE  阅读(92)  评论(0)    收藏  举报