thrift学习

学习thrift的一些总结

最近由于项目组买了面结构光传感器,自带一个软件,然而老师想我们自己做二次开发,然后就和技术聊了,他们的是基于thrift来做的,而thrift是个啥玩意,没办法,只能硬着头皮学了,这里记录一下学习中掉的坑。

thrift是个什么东西

Thrift是一种接口描述语言和二进制通讯协议,[1]它被用来定义和创建跨语言的服务。[2]它被当作一个远程过程调用(RPC)框架来使用,是由Facebook为“大规模跨语言服务开发”而开发的。它通过一个代码生成引擎联合了一个软件栈,来创建不同程度的、无缝的跨平台高效服务,可以使用C#、C++(基于POSIX兼容系统[3])、Cappuccino、[4]Cocoa、Delphi、Erlang、Go、Haskell、Java、Node.js、OCaml、Perl、PHP、Python、Ruby和Smalltalk。这里摘录维基百科的介绍。我理解就是可以使用一种语言写服务端,用另一种语言写客户端,客户端只需要知道服务端的接口就行了,至于服务端是使用什么语言,怎么实现的都不用在乎。

thrift安装

首先安装依赖

xingkp@xingkp-Vostro:~$ sudo apt-get install libboost-dev libboost-test-dev libboost-program-options-dev
 libevent-dev automake libtool flex bison pkg-config g++ libssl-dev

然后从官网下载thrift安装包http://archive.apache.org/dist/thrift/,我使用的操作系统是ubuntu16.04,由于甲方提供的服务端在thrift-0.11.0版本下编译,因此我下载的是thrift-0.11.0版本的压缩包,下载完压缩包,解压到home目录下,然后执行

xingkp@xingkp-Vostro:~$ cd thrift-0.11.0/

然后安装编译

xingkp@xingkp-Vostro:~/thrift-0.11.0$ ./configure
xingkp@xingkp-Vostro:~/thrift-0.11.0$ sudo make
xingkp@xingkp-Vostro:~/thrift-0.11.0$ sudo make install

当我执行make,出现了一个错误,后来查了好久,原来是我电脑上装了qt4和qt5,导致了编译的时候程序没能正确链接到对应的qt版本,因此在执行第一步的时候改为

xingkp@xingkp-Vostro:~/thrift-0.11.0$ ./configure -with-qt5=no

这样在后续步骤才没出错
编译完成还需要添加环境变量,执行

xingkp@xingkp-Vostro:~$ sudo gedit ~/.bashrc

在打开的文件末尾添加export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/usr/lib
如果安装成功,那么查看thrift版本应该是这样的

xingkp@xingkp-Vostro:~$ thrift -version
Thrift version 0.11.0

thrift默认安装在/usr/local/下面,查看/usr/local/lib文件夹应该有thrift相关的文件,这样就安装完成了。
在这里插入图片描述

thrift程序编译

如果是自己编写服务端,那应该首先创建一个thrift文件,然后生成cpp文件,再编写客户端,再编译,由于甲方已经编写好了服务端,这里直接对服务端进行编译。
首先进入gen-cpp文件夹

xingkp@xingkp-Vostro:~$ cd 3d_scan_thrift_test/gen-cpp/
xingkp@xingkp-Vostro:~/3d_scan_thrift_test/gen-cpp$

然后执行编译

xingkp@xingkp-Vostro:~/3d_scan_thrift_test/gen-cpp$ g++ -std=c++11 -DHAVE_NETINET_IN_H -g -I/usr/local/include/thrift  
scan_3d.cpp  techlego_meshwork_constants.cpp techlego_meshwork_types.cpp techlego_vtop_constants.cpp 
techlego_vtop_types.cpp scan_3d_server.skeleton.cpp  -o scan_3d -L/usr/local/lib -lthrift

生成可执行文件scan_3d(服务端)

编写客户端

xingkp@xingkp-Vostro:~/3d_scan_thrift_test/gen-cpp$ g++ -std=c++11 -g -Ithrift -L -lm -pthread -lz -lrt -lssl 
scan_3d.cpp techlego_vtop_types.cpp techlego_vtop_constants.cpp client.cpp -o client -lthrift

编译完成后先执行服务端

xingkp@xingkp-Vostro:~/3d_scan_thrift_test/gen-cpp$ ./scan_3d

再执行客户端

xingkp@xingkp-Vostro:~/3d_scan_thrift_test/gen-cpp$ ./client

这里是调试用,实际上在windows下的面结构光采集软件可以集成了服务端,因此只需要编写客户端,即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值