关闭

LUA--thrift--lib库的创建生成

标签: lua
193人阅读 评论(0) 收藏 举报
分类:

首选先参考这个作者些的:


thrift是一个比较流行的rpc框架,很多公司都有大规模使用的经验,不过网上很少有关于thrift-lua的介绍和example

apache的thrift-lua也是刚刚从fbthrift项目引入,在安装过程中踩了一些坑,记录一下


首先是版本问题,apache-thrift的最新版本是0.9.3,这个版本支持的lua版本是5.2

不过由于nginx-lua模块用的是luajit,luajit用的lua版本是5.1.4,所以我 用的thrift版本是0.9.2


准备工作,首先安装lua5.1,默认的安装会把lua的头文件放在/usr/local/include

自己建一个目录名字为:lua5.1,然后把头文件拷贝进去


第一个坑是make时报错/usr/bin/ld: cannot find -llua5.2

在lib/lua下的Makefile.am中可以看到,这个编译选项是写死的,修改后为

libluasocket_la_CPPFLAGS = $(AM_CPPFLAGS) -I/usr/local/include/lua5.1 -DLUA_COMPAT_MODULE
libluasocket_la_LDFLAGS = $(AM_LDFLAGS) ${LUA_LIB} -lm

所有写着lua5.2的地方都按照上面的写法改掉,然后就可以通过make了


注意:lua.h 的提示错误,可能lua的库为liblua-5.1请知晓


第二个坑是在make install的时候找不到lualongnumber,这个库不是Lua自带的,是thrift中的,所以不应该会报错啊,而且有个朋友可以顺利编译安装,而我不行


看了报错信息,在生成的libluabpack.la文件中发现了线索

dependency_libs=' /home/kira/src/thrift/thrift-0.9.2/lib/lua/liblualongnumber.la -lm -lssl -lcrypto -lrt -lpthread'

但是看日志在编译libluabpack.so之前并没有先生成liblualongnumber.so,怀疑还是Makefile问题

于是把Makefile.am中的内容修改为:

lib_LTLIBRARIES = \
                        libluasocket.la \
                        liblualongnumber.la \
                        libluabitwise.la \
                        libluabpack.la

其实就是把libluabpack.la和liblualongnumber.la换个位置,修改Makefile.am后重新configure一下,然后就能顺利通过安装了


此处lua,make提示automake版本不对,核对下,此处的automake提示的automake-1.14,为automake-1.14.1


最后写一个example,原来thrift已经有一个了在tutorial文件夹下,不过不巧没有Lua的例子,只能自己写

先是生成文件,然后写个client,代码如下

[plain] view plain copy
  1. package.path = package.path .. ";./gen-lua/?.lua"  
  2. package.cpath = package.cpath .. ";/usr/local/lib/?.so"  
  3. require('TSocket')  
  4. require('TBinaryProtocol')  
  5. require('liblualongnumber')  
  6. require('TTransport')  
  7. require('tutorial_Calculator')  
  8.   
  9. local client  
  10.   
  11. function teardown()  
  12.   if client then  
  13.     -- Shuts down the server  
  14. --    client:testVoid()  
  15.   
  16.     -- close the connection  
  17.     client:close()  
  18.   end  
  19. end  
  20.   
  21. function testBasicClient()  
  22.   local socket = TSocket:new{  
  23.     port = 9090  
  24.   }  
  25.   socket:open()  
  26.   assert(socket, 'Failed to create client socket')  
  27.   socket:setTimeout(5000)  
  28.   
  29.   local protocol = TBinaryProtocol:new{  
  30.     trans = socket  
  31.   }  
  32.   assert(protocol, 'Failed to create binary protocol')  
  33.   
  34.   client = CalculatorClient:new{  
  35.     protocol = protocol  
  36.   }  
  37.   
  38.   result = client:add(1,1)  
  39.   print(result)  
  40.   
  41. end  
  42.   
  43. testBasicClient()  
  44. teardown()  


运行后报错找不到lua_rawlen模块,由于lua_rawlen是Lua5.2才有的,所以要把src/luabpack.c这个文件的代码修改为size_t len = lua_objlen(L, 2);然后重新编译安装

还有Thrift.lua中有一句版本号的代码也是 运行时报错直接注释掉


再运行还是报错

./gen-lua/tutorial_Calculator.lua:125: malformed number near '0x2233d70Processor'

很奇怪生成的代码居然以数字开头,且只有一处是这样的,修改为_TProcessor



然后起一个Python的Server,运行Client,得到返回结果执行成功


最后此篇作者需要补充的,lua客户端,需要嵌入的lualib库文件,so文件缺失,需要自我进行编译,系统平台不一样编译方法不一样

macOs上的编译

命令

gcc -O2 -bundle -undefined dynamic_lookup -o lualib.so libluabpack_la-luabpack.o  


gcc -O2 -bundle -undefined dynamic_lookup -o libluabpack.so libluabpack_la-luabpack.o liblualongnumber_la-longnumberutils.o


gcc -O2 -bundle -undefined dynamic_lookup -o libluabitwise.so libluabitwise_la-luabitwise.o


gcc -O2 -bundle -undefined dynamic_lookup -o libluasocket.so libluasocket_la-luasocket.o libluasocket_la-usocket.o


gcc -O2 -bundle -undefined dynamic_lookup -o liblualongnumber.so liblualongnumber_la-lualongnumber.o liblualongnumber_la-longnumberutils.o



LINUX系统上进行编译以上命令就需要更换

gcc *.c -fPIC -shared -o libtest.so    总生产so包命令,参考

                                                                                          
gcc -fPIC -shared luasocket.c socket.h usocket.c -olibluasocket.so                           
gcc -fPIC -shared -o lualib.so luabpack.c                                                     
gcc -fPIC -shared -o libluabpack.so luabpack.c longnumberutils.c                              
gcc -fPIC -shared -o libluabitwise.so luabitwise.c                                            
gcc -fPIC -shared -o liblualongnumber.so lualongnumber.c longnumberutils.c 


可惜本级LUA版本5.3+,5.1.4服务器调试成功,5.3没试出来有好的方式,

luarocks大家也可以试试,5.3的是没有发现有对应的扩展库文件,可惜了,如果能够同时跑nginx + lua (不同的版本)就好了,能力有限没发现怎么做,有注意到朋友希望给予指导



以下是5.3的调试:

遇到的错误 thrift0.11.0,./configure: line 18214: syntax error near unexpected token `QT,'
./configure: line 18214: `    PKG_CHECK_MODULES(QT, QtCore >= 4.3, QtNetwork >= 4.3, have_qt=yes, have_qt=no)'

请教了朋友终于确定了问题是,该版本的一个坑,缺了一个文件pkg.m4,该文件一般被安装到了cd /usr/local/share/aclocal,里面,把该文件cp到thrift解压到包中aclocal目录下,就可以了


如果编译模式下,看看有没有安装lua-devel,这个是编译必须的











0
0
查看评论
发表评论
* 以上用户言论只代表其个人钱柜娱乐开户,不代表CSDN网站的钱柜娱乐开户或立场

Thrift使用文档详解(一步一步跟着做就可以)

Linux下使用Thrift详细步骤 一、下载 下载 boost(c++静态库,必须),官方网址  http://sourceforge.net/projects/boost/files/boo...
  • dhc566
  • dhc566
  • 2015-07-09 09:57
  • 2954

VS编译Lua程序,生成lua.lib

1、下载Lua源码 http://www.lua.org/download.html  a 下载后解压到一个目录下,这里假设解压到D:\lua-5.1.5b 注意下载的版本,如果是5.2.x,后面代...
  • u010075060
  • u010075060
  • 2015-03-14 13:57
  • 1467

使用钱柜娱乐开户 Studio生成类库

钱柜娱乐开户Studio生成类库
  • Gaugamela
  • Gaugamela
  • 2017-01-15 13:07
  • 1563

thrift0.9.3 windows cpp lib patch

  • 2016-05-03 11:29
  • 21KB
  • 下载

thrift生成好的python hbase库

  • 2017-11-09 16:37
  • 881KB
  • 下载

thrift windows vs2013编译lib

thrift windows vs2013 win7配置,修正几个问题
  • zengraoli
  • zengraoli
  • 2016-05-05 10:11
  • 2943

VS编译Lua程序,生成lua.lib

1、下载Lua源码 http://www.lua.org/download.html  a 下载后解压到一个目录下,这里假设解压到D:\lua-5.1.5b 注意下载的版本,如果是5.2.x,后面代...
  • u010075060
  • u010075060
  • 2015-03-14 13:57
  • 1467

nginx使用ngx_lua访问后端Thrift-Server实现和介绍

http://www.blogs8.cn/posts/ypZbd5d 背景 随着openresty的出现,让nginx使用lua解决一些业务的能力大幅度提高,ngx_lua可以使用nginx自...
  • yangguangmeng
  • yangguangmeng
  • 2016-12-09 09:46
  • 455

Openresty/Lua + Thrift + HBase

Openresty/Lua使用Thrift借口访问HBase
  • for_tech
  • for_tech
  • 2016-08-30 16:32
  • 1101

Thrift lua example

最近做个项目,想法是nginx+lua+thrift thrift是一个比较流行的rpc框架,很多公司都有大规模使用的经验,不过网上很少有关于thrift-lua的介绍和example apache的...
  • superye1983
  • superye1983
  • 2016-04-19 16:01
  • 1537
    个人资料
    • 访问:182086次
    • 积分:1725
    • 等级:
    • 排名:千里之外
    • 原创:376篇
    • 转载:88篇
    • 译文:1篇
    • 评论:0条
    文章分类