[C.C++] thrift c语言支持,thrift C编译安装

494 0
Honkers 2025-5-14 23:58:43 来自手机 | 显示全部楼层 |阅读模式

一、写在前面

thrift是一种跨语言函数调用的框架,可以方便的实现多语言应用程序间的函数调用。

比如我现在有两个应用程序,一个是C语言写的,一个是python写的。如果我希望这两个程序可以进行函数调用,我们可以想到很多种方式,共享文件,消息队列,socket等等,然后双方规定好协议,比如传输1调用对方的fun函数。但是这样实现有很多种弊端,如果两者间调用函数特别多,函数入参、返回值又不是基本数据类型的话,那这个函数调用框架就有的忙活的了。

thrift说“别怕,看我的”。thrift的思想其实很简单。A和B两个语言之间要实现通信,如果A可以之间调用B中的函数,通过函数获取A想要的结果,这种实现无非是极好的。但是A要调用B中的函数,需要解决一些问题:数据类型如何实现互通转换;

如果实现函数调用

为了解决上述两个问题,thrfit规定通信的双方需要提供一个接口文档,这个接口文档是语言无关的,接口文档中所有的数据类型都是thrfit自己定义的数据类型,如i32,i64,bool等,当然这些thrift数据类型在不同语言都有对应的数据类型,函数的入参和返回值也都限于接口文档中定义的数据类型。比方我需要个复杂数据类型,那么我就在接口文档中定义个复杂数据类型,这个复杂的数据类型由thrift基本数据构成,在C语言看来可能用结构体表示,而JAVA可能用类来实现一把。其实就是thrift在不同语言间加了个中间件,果然所有的软件问题都能通过加一个中间件来解决,如果有,就再加一层。

至于通信就更加简单了,我只要告诉对方我需要调用什么函数,入参是什么,返回值是什么,对方接到这个消息之后就会查找自己实现的接口文档中的函数,然后把接到的参数翻译成自己语言的数据(这个过程由thrift框架完成),最后把函数执行结果填充给thrift即可。

既然这么简单,一定要去瞧一瞧,那我们快上车吧。

二、thrfit编译安装

老规矩,编译安装采取源代码方式安装。需要安装些编译工具sudo apt-get install flex bison ;

安装autotool相关工具sudo apt-get install libboost-dev libtool;

安装glib库,当然你机器上要是有的话可以忽略。下载代码http://ftp.gnome.org/pub/gnome/sources/glib/2.50/,安装相关依赖sudo apt-get install libffi-dev,然后去glib工程里执行./configure --with-pcre=internal --enable-libmount=no --prefix=/usr,然后make & make install即可;

下面为了编译方便,我们撸一个编译脚本好了,起名叫build.sh,里面的内容如下,执行一下即可,当然你如果不想编译其他语言的thrift库,在./configure后添加--without-语言就可以了,如--without-cpp --without-nodejs --without-python:#!/bin/bash

CUR_DIR=`pwd`

THRIFT_VERSION=thrift

cd ${CUR_DIR}/${THRIFT_VERSION}

make distclean

#1.config

export CFLAGS="-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include"

export LDFLAGS="-lglib-2.0"

./configure --with-php=no --prefix=/usr/

make & make install

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4012
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行