博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
thrift使用过程中的问题
阅读量:4108 次
发布时间:2019-05-25

本文共 1193 字,大约阅读时间需要 3 分钟。

转自

1. thrift的安装,不容小视,他需要依赖很多的库和工具,尤其是boost等工具都需要源码安装,所以严格按照官网上的信息,一步一步执行就可以来。

    http://thrift.apache.org/download/

    有两个问题需要注意: 1. 安装过程无需./bootstrap这个过程,本来就没有这个文件

                                        2.Apache要求安装之后认证,可以在svn上面下一个KYES完成认证过程;

2. 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,问题就解决了

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

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

你可能感兴趣的文章
基于“分形”编写的交互应用
查看>>
《融入动画技术的交互应用》主题博文推荐
查看>>
链睿和家乐福合作推出下一代零售业隐私保护技术
查看>>
Unifrax宣布新建SiFAB™生产线
查看>>
艾默生纪念谷轮™在空调和制冷领域的百年创新成就
查看>>
NEXO代币持有者获得20,428,359.89美元股息
查看>>
Piper Sandler为EverArc收购Perimeter Solutions提供咨询服务
查看>>
RMRK筹集600万美元,用于在Polkadot上建立先进的NFT系统标准
查看>>
JavaSE_day12 集合
查看>>
JavaSE_day14 集合中的Map集合_键值映射关系
查看>>
Day_15JavaSE 异常
查看>>
异常 Java学习Day_15
查看>>
JavaSE_day_03 方法
查看>>
day-03JavaSE_循环
查看>>
Mysql初始化的命令
查看>>
day_21_0817_Mysql
查看>>
day-22 mysql_SQL 结构化查询语言
查看>>
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>
css基础
查看>>