luasql编译集成方式

之前由于skynet框架本身集成了mysql模块,因此没有碰到什么困难就完成了mysql功能的开发。这次由于没有采用skynet框架,因此在编译集成lua下的mysql时遇到了几个问题,记录下:

1. 用resty-mysql还是luamysql

这两个都是lua的mysql实现,用户接口操作也大同小异,主要区别在resty-mysql基于nginx开发,skynet把resty-mysql拿来修改了下,增加了lua 5.3的支持,去掉了nginx的依赖,改为skynet的socketChannel来实现。但是总体来说resty-mysql不独立,需要引入其他模块,因此被抛弃。选择了luamysql。


2. luamysql编译流程

     (1)下载源代码

git clone https://github.com/keplerproject/luasql.git 

(2) 编译

make

make install 

PS:注意在make过程中可能会遇到lua.h/mysqlclient.so等路径不对的问题,通过config文件修改路径即可。


      (3) 引入

      make install以后luamysql会被cp到以下位置:

/usr/lib/lua/5.2/luasql/mysql.so

在lua中require需要通过修改LUA_CPATH来指定。这里可能会有个问题。下面详细说。

我一开始设置LUA_CPATH路径为下面这个路径:

export LUA_CPATH=/usr/lib/lua/5.2/luasql/?.so;


但是在lua中require中出现一个问题, 

/usr/lib/lua/5.2/luasql/mysql.so: undefined symbol: luaopen_mysql


通过查询mysql.so的符号表得知: 

0000000000002930 T luaopen_luasql_mysql

mysql只有这个symbol,因此LUA_CPATH的路径必须为以下地址:

export LUA_CPATH=/usr/lib/lua/5.2/?.so;


然后通过 require "luasql.mysql" 引入模块。








猜你喜欢

转载自blog.csdn.net/johnhill_/article/details/71080909
今日推荐