thrift使用过程中的问题

thrift安装完成之后,可以通过一个实例来熟悉它的使用过程。要感谢xiaoshe朋友的博客http://blog.csdn.net/hbuxiaoshe/article/details/6558391,给我提供了一个完整的学习样例。该博客中写的非常清晰。

有几个需要注意的问题:

    thrift本身是一个开源的软件,它一直处于开发过程中,难免出现一些bug,下面是我遇到的几个bug;

   

第一

: 在运行编译thrift生成的服务器端程序时,出现

                 error: ‘uint8_t’ does not name a type

                 error: ‘uint32_t’ does not name a type

        这个问题一开始的确让我很迷茫,难道使用thrift生成代码的同时,还需要手动添加各种头文件吗,这个问题看起来很简单,只要手工在各个相关文件中加入stdint.h头文件就可以,不过这个要求很匪夷所思,

后来在网上查找,找到了这个问题的解决方法,在TProtocol.h中有这样的语句:#ifdef HAVE_NETINET_IN_H的预处理命令,而且后面就是我们想要的头文件。

         因此在g++之后,加上参数 --DHAVE_NETINET_IN_H实现变量声明,就可以解决这个问题。我的理解是现在thrift存在的一个问题,或者直接修改TProtocol.h不过,我不建议这样做。

   

第二

: undefined reference to `apache::thrift::TApplicationException::write(apache::thrift::protocol::TProtocol*) const'

         这也是存在的一个源码的bug,在protocol/TBinaryProtocol.h中,有两条语句

          static const int32_t

          这时,想到前面出现的问题,只要改成 static const uint32_t,问题就解决了

    

 

  第三

在一个编译命令中,遇到来一个非常奇怪的问题,一直没有找到合适的解决方法,后来发现把-lthrift放在给g++的最后就可以解决了,后来理解到原因可能是后面还有内容需要依赖于thrift库,而把他放在前面,后面对库的依赖就找不到来,

可以看出g++后面参数的顺序和位置对程序的编译和执行的影响还是挺大的。

具体指令如下:
    thrift生成cpp文件的方法
thrift -r --gen cpp student.thrift  
    thrift生成server端的方法
 g++ -g -I/usr/local/include/thrift -L/usr/local/lib Serv.cpp student_types.cpp student_constants.cpp Serv_server.skeleton.cpp -o server -lthrift
 thrift生成client端的方法
 g++ -g -I/usr/local/include/thrift -L/usr/local/lib -lm -pthread -lz -lrt -lssl Serv.cpp student_types.cpp student_constants.cpp client.cpp -o client -lthrift

官方的使用教程和事例

http://wiki.apache.org/thrift/ThriftUsageC%2B%2B

  第四:thrift tutorial编译link时,报undefined reference to TApplicationException::read()等错误

出现这种错误是因为我选择了连接静态库,解决这个问题,只是将静态库放在最后就可以了,

g++ -DHAVE_NETINET_IN_H -DHAVE_INTTYPES_H -DHAVE_PTHREAD_H  -o CppClient -I/usr/local/include/thrift -I/usr/include  -I../gen-cpp CppClient.cpp ../gen-cpp/SharedService.cpp ../gen-cpp/shared_types.cpp ../gen-cpp/tutorial_types.cpp ../gen-cpp/Calculator.cpp -lpthread /usr/local/lib/libthrift.a


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值