引用链接:
https://www.cnblogs.com/49er/p/7193829.html
最近在弄windows下 的Facebook的rpc 框架 thrift ,
网上东西看了很多, 但是大都不能一篇到位, 这里总结了一下,
也记一下自己遇到的问题和解决的方法
这里把我在实际过程中遇见的问题,以及问题的解决方法写一下:
基本是参照现这个版本来的:
总体有两种思路,一种是利用virtual studio 的nuget 包管理工具,编译安装thrift以及其libevent,boost,openssl这几个依赖库,
一种是从这些各自的官网,或者git-hub上下载源码编译安装,但是由于我本地的nuget一直无法连接(有vpn),遂放弃这种方式
这个方式的指导连接在这里:
https://blog.csdn.net/xie1xiao1jun/article/details/53332504
https://blog.csdn.net/fm0517/article/details/91578554
VS2013 x64 本机工具命令提示,进入目录下面的目录中
D:ProgramIDEMicrosoft Visual Studio 12.0VCinamd64
执行命令:vcvars64.bat
perl Configure VC-WIN64A no-asm --prefix=D:360Downloadsopenssl-1.0.2s
其中prefix后面的路径是源码路径。
使用libevent的问题
1)找不到
event-config.h在E:libevent-2.1.8-stableWIN32-Code
makeevent2目录下,
因此编译完成后要把E:libevent-2.1.8-stableWIN32-Code make下的所有文件和目录拷贝到E:libevent-2.1.8-stableinclude
Windows 10 Visual Studio 2017 安装配置 Apache Thrift (C++)
最近需要使用Thrift,所以在网上看了很多资料,不过很多教程都不够详细完整,导致我花了不少时间安装配置。在这里我把我配置的过程写下来和大家分享。
1 介绍
Apache Thrift 是一个跨语言的远程过程调用框架(RPC,Remote Procedure Call)。首先使用接口描述语言(IDL,Interface Description Language)编写 .thrift 文件,然后通过 Thrift 编译成C++、JAVA、C# 等语言的代码。这些代码之间可以互相远程调用。Thrift 封装了底层网络通信的内容,用户只需要编写顶层逻辑代码就可以了。
2 测试环境
Windows 10
Microsoft Visual Studio 2017
Apache Thrift 0.9.2.
Boost 1.64.0.
libevent-2.1.8-stable
OpenSSL 1.0.2l
3 使用 Visual Sdutio 2017 编译生成 libthrift.lib
下载安装Boost,记住**{Boost安装目录}。安装过程见Windows 10 Visual Studio 2017 安装配置 Boost。
下载安装OpenSSL,下载网址。安装过程见Windows 10 Visual Studio 2017 安装配置 OpenSSL。记住{OpenSSL 目录}**
从 Apache Thrift 官网下载 Windows 平台的 Thrift 源代码和编译器。
下载libevent,非阻塞的 Thrift 服务器需要这个库。
解压缩下载的文件。
去**{thrift 安装目录}libcpp 目录,点击thrift.sln**,打开 VS 项目,里面有两个项目libthrift 和 libthriftnb。
会有一个对话框询问是否升级,点击升级。
打开 Developer Command Prompt for VS 2017。
在 Developer Command Prompt 中进入 {libevent 安装目录}。
输入 nmake -f Makefile.nmake 来安装libevent。
完后后,右键 libthrift项目,点击属性 > C/C++ > 常规。
在附加包含目录中添加:
{boost 安装目录}oost_1_64_0;{boost 安装目录}oost_1_64_0oost;{OpenSSL 目录}inc32
点击库管理器 > 附加库目录,添加如下文件:
{OpenSSL 目录}out32dll
右键 libthriftnb项目,点击属性 > C/C++ > 常规。在附加包含目录中添加
{boost 安装目录}oost_1_64_0;{boost 安装目录}oost_1_64_0oost;{OpenSSL 目录}inc32;{libevent_install_dir};{libevent_install_dir}include;{libevent_install_dir}WIN32-Code;
点击库管理器 > 附加库目录,添加如下文件:
{OpenSSL 目录}out32dll
然后编译生成文件,如果使用DEBUG模式,会在**{thrift 目录}libcppDEBUG**中生成libthrift.lib。
4 建立 Server、Client 示例
4.1 建立 Thrift C++ Server
创建Hello.thrift文件
namespace cpp Demo
service Hello{ string helloString(1:string para) i32 helloInt(1:i32 para) bool helloBoolean(1:bool para) void helloVoid() string helloNull() }
编译生成 C++ 源文件,会生成 gen-cpp文件夹
thrift -r --gen cpp Hello.thrift
生成的文件如下:
新建 Visual Studio 项目,并将生成的文件粘贴入项目文件夹中。
我们只需要实现Hello_server.skeleton.cpp中的方法即可。
右键项目,点击属性 > C/C++ > 常规 > 附加包含目录,添加:
{thrift 安装目录}libcppsrc;{thrift 安装目录}libcppsrc hriftwindows;{boost 安装目录}oostoost_1_64_0;%(AdditionalIncludeDirectories)
点击链接器 > 常规 > 附加库目录,添加:
{boost 安装目录}oostoost_1_64_0stagelib;{thrift 安装目录}libcppDebug;%(AdditionalLibraryDirectories)
点击链接器 > 所有选项 > 附加依赖项,添加:
libboost_thread-vc141-mt-gd-1_64.lib;libboost_chrono-vc141-mt-gd-1_64.lib;libthrift.lib;
如果是 0.91 之前的 thrift,还需要在Hello_server.skeleton.cpp源文件main函数前面加上如下代码:
WSADATA wsaData = {};
WORD wVersionRequested = MAKEWORD(2, 2);
int err = WSAStartup(wVersionRequested, &wsaData);
点击生成,Server端就可以启动了。
这些库的名称要以你自己安装的库为准,你需要去boost文件夹中查看这些库的准确名称。上面 {} 里面的安装目录也是这样。
4.2 生成 Thrift C++ Client
和 Server 的配置过程一样,只不过我们不用Hello_server.skeleton.cpp。我们需要自己编写客户端:
#include "Hello.h"
#include
#include
#include
#include
#include using namespace apache::thrift;
using namespace apache::thrift::protocol;
using namespace apache::thrift::transport;
using boost::shared_ptr;int main(int argc, char **argv) {boost::shared_ptr socket(new TSocket("localhost", 9090));boost::shared_ptr transport(new TBufferedTransport(socket));boost::shared_ptr protocol(new TBinaryProtocol(transport));// 只需要实例化 HelloClient,然后就可以远程过程调用了Demo::HelloClient client(protocol); transport->open();// Your Codes std::cout << client.helloInt(10030341) << std::endl;std::string tem = "hello from Client";client.helloString(tem, tem);std::cout << tem << std::endl;transport->close();return 0;
}
4.3 演示
4.3.1 Server
4.3.2 Client
二、nuget方式
配置nuget boost 库
点击右键:管理nuget程序包
Install-Package boost-vc140
(v1.62.0)
Install-Package openssl.v140.windesktop.msvcstl.dyn.rt-dyn
(OpenSSL 1.0.2d )
Install-Package libevent_vc120
(2.14 )
编译完成:
拷贝src,lib文件到项目
给出一个windows配置好的版本
里面包括vs2013,vs2015
thrift-master-0.9.3libcppVS2013
thrift-master-0.9.3libcppVS2015
————————————————
版权声明:本文为CSDN博主「冰_封」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xie1xiao1jun/article/details/53332504
这里用散装版本的AutoScssStruct4Vue为例 先去https://github.com/accforgit/AutoScssStruct4Vue下载 然后把解压后的包放入C:UsersAdministrator.vscodeextensions(地址根据你自己的安装目录而定) 点开目录在资源管理器...
网上搜到的结果大都不令人满意,这里综合了网上的结构,做了小许改动.希望对大家有帮助.
在Linux下的目录结构操作基本上使用opendir,readdir,closedir就够了.
#include
文章目录git 最小配置作用域git 创建本地仓库git log 查看版本演进.git 目录refs目录objectsgit 三种对象类型详解 (commit ,tree,blob)...
一 . 进入目录权限 如果我在普通用户下创建了一个目录f1,然后使用chomd u-rwx,g-rwx,o-rwx之后,我在普通用户下想进入f1目录,权限不允许。 然后我切换到超级用户下,再次尝试进入到f1目录,这个时候允许进入。 然后回到普通用户下,只给f1的所有者读的权限,然后在普通用户下尝试进入,此时权限还是...
如果你想在自己的IPhone上安装一个ipa文件,你的手机是无法正常安装的,(越狱,企业证书分发除外)但是我们可以通过以下步骤来实现,前提要有自己的开发者账号。接下来就看一下具体的步骤:第一步:用Xcode新建一个工程Bundle identifier不要和手机中已有的的APP重复,然后用自己的证书打包出ipa文件。第二步:获取mob...
刚接触,啥子都不会,按着教程走需求:识别图片中的文字信息环境:windows系统开发语言:python3.5使用工具类:1.pyocr2.PIL3.tesseract-ocr步骤:1.pyocr网络通直接使用命令:pip install pyocr网络不通,转至https://pypi.python.org/pypi/pyocr/0....
1、前言程序设计好以后会生成若干可执行文件和依赖文件。为了方便程序被更好地使用,需要将程序封装为一个安装程序。2、平台和环境Windows系统安装NSIS下载地址:https://nsis.sourceforge.io/DownloadNSIS(Nullsoft Scriptable Install System)是一个开源的 Win...
展开全部 f=open('xxx','r',encoding='utf-8') file=f.readlines() f.close() f=open('xxx','w',encoding='utf-8') for i in len(file): ----file[i]=file[i].split(',') ----file[i][1...
PIL(Python Imaging Library)是Python中一个强大的图像处理库,但目前其只支持到Python2.7 pillow是PIL的一个分支,虽是分支但是其与PIL同样也具有很强的图像处理库。 Python3.7.0 如何安装pillow 此安装方法在windows7环境下完成: >>>win+r调出运行窗口,键入c...
异步模式的服务器源码
//g++ -g async_tcp_server.cpp -o async_tcp_server -lboost_system
//#include
近来狂热地研究boost的开发技术,现将读书笔记整理如下: 需要说明的是, 本博该专题下面关于boost的源码是采用boost1.55版本, 运行在Ubuntu 14.04 64bit下面, 使用apt包安装(非源码编译安装), 后续不再做说明. 同步socket类型的服务器源码实现: //g++ -g sync_tcp_s...