thrift for lua 使用记录

本人精心总结,欢迎转载,转载请注明出处: http://blog.csdn.net/einsteinlike/article/details/43700985
thrift是一个十分节省的数据传输协议,我们尝试将其移植到quick-cocos2dx上面:
lua的使用:首先编译lua5.2 make install进系统。然后编译thrift 0.9.2 ,配置的时候选择 ./configure —with-lua —with-c++等
然后make的时候各种有错,没关系,只要到make lua结束后就可以忽略后面的错误,直接make install ,因为后面的错误是test的错误。
然后使用thrift , thrift -gen lua xxx.thrifts。来生成目标语言的接口代码,这里生成lua的代码。
然后找到test里面的lua 客户端与服务器test,将lib下的lua文件都拷贝过来,里面有一些修改,比如require 'xxxx'之前加入 libxxx=require ‘xxxx’,这样方便函数调用:libxxx:func.
make  lib目录下的src里的那些.c文件,之后会出现4个.la ,luabitwise , luabpack , lualongnumber,luasocket .但是经过查询la文件只是个说明文件,没有用,lib下的那些lua文件又require了他们,所以他们必须是动态库.so文件。
所以我用xcode+gcc编译了这4个.so,首先建立xcode项目:MACOSX 的 bundle。然后放入那些.c,有的需要两个.c才能编译成功,这期间的错误只能经过他本身的修改源代码来解决。
Xcode build success后,我们不需要bundle文件,所以我们找到bundle文件的目录,在其上级目录下的某个目录中找到我们需要的.o文件(这里最好不一次性编译好4个bundle,而是一个一个的编译好,然后就去找对应的.o,因为其中有一个longnumber.c被两个动态库都用到了,所以一个一个的编译可以避免冲突 )
拷贝出.o,用下面提到的命令行编译出.so,供lua调用,调用期间出现的各种错误需要通过修改.c的源代码解决。

编译过程中的一些错误与修改:
make thrift 出错:
t_test_second_service.o
gen-c_glib/t_test_second_service.c:488:3:
error: non-void function 't_test_second_service_handler_blah_blah' should return a value [-Wreturn-type]
  g_return_if_fail (T_TEST_IS_SECOND_SERVICE_HANDLER (iface));
  ^
/usr/local/include/glib-2.0/glib/gmessages.h:373:3: note: expanded from macro g_return_if_fail' ,这里我都替换成了return 0;
         return;                                                        \
         ^
gen-c_glib/t_test_second_service.c:495:3:
error: non-void function 't_test_second_service_handler_secondtest_string' should return a value
      [-Wreturn-type]

  g_return_if_fail (T_TEST_IS_SECOND_SERVICE_HANDLER (iface));
  ^
/usr/local/include/glib-2.0/glib/gmessages.h:373:3: note: expanded from macro 'g_return_if_fail'
         return;  



编译boost出错,或者找不到boost:修改如下目录为本地该有的目录
BOOST_CPPFLAGS = -I/usr/local/include/boost-0


找不到以下函数,都替换为TLSv1_method()
  else if(protocol == TLSv1_1)
  {
    ctx_ = SSL_CTX_new(TLSv1_1_method());
  }
  else if(protocol == TLSv1_2)
  {
    ctx_ = SSL_CTX_new(TLSv1_2_method());
  }
 
编译lua用的.so动态库的命令行:
gcc -O2 -bundle -undefined dynamic_lookup -omylualib.so src/libluabpack_la-luabpack.o  lua能够识别的库
liujiandeMini:lua liujian$ gcc -O2 -bundle -undefined dynamic_lookup -olibluabpack.so src/luabpack.o src/longnumberutils.o
liujiandeMini:lua liujian$ gcc -O2 -bundle -undefined dynamic_lookup -o libluabitwise.so src/luabit
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值