转:https://blog.csdn.net/yuchno1/article/details/78797692
下载并安装依赖项1.我们需要首先下载boost 1.65.0, OpenSSL for Windows, Win flex-bison, libevent并安装/解压它们.2.解压boost包,依次执行bootstrap.bat和b2.exe进行编译,然后添加环境变量BOOST_ROOT指向boost所在路径3.安装OpenSSL for windows,这是OpenSSL为windows平台提供的一个安装程序,然后添加环境变量OPENSSL_ROOT_DIR指向安装目录4.解压win flex-bison, 并将win-flex和win-bison重命名为flex, bison,将解压后的根目录加入PATH环境变量5.解压libevent,往根目录下的三个文件event_iocp.c, evthread_win32.c, listener.c中添加预定义: #define _WIN32_WINNT 0x0501,然后打开Developer Command Prompt for VS2010,切换到libevent顶层目录并执行nmake /f Makefile.nmake,这将会在根目录下生成三个library: libevent.lib libevent_core.lib libevent_extras.lib
编译libthrift 在C++工程中使用thrift需要首先编译好thrift的两个静态库.在官网下载thrift源码(当前版本是0.10.0),在thrift/lib/cpp/下有一个官方提供的Visual Studio 2010解决方案(*.sln),但是该解决方案里的libthrift工程无法直接使用,需要我们进行一些修改, 应该是官方的失误. 打开3rdparty.props文件, 把\boost_1_47_0修改为你使用的boost库版本(我使用1.47.0编译时有问题,所以换成了1.65.0) 打开VS工程,添加以下缺失文件(目录里有但是官方给的VS工程里忘加了,不加也可以编译成功但链接静态库时会报错): src/thrift/server/TConnectedClient.h src/thrift/server/TServerFramework.h src/thrift/server/TConnectedClient.cpp src/thrift/server/TServer.cpp src/thrift/server/TServerFramework.cpp 编译之后应该生成libthrift.lib和libthriftnb.lib两个静态库
编写thrift文件 具体语法可上官网查询
编译thrift文件到C++ thrift.exe -r --gen cpp source.thrift 默认会在当前目录生成一个名为gen-cpp的文件夹,以及以下几个公用文件(服务器端和客户端都要用到): ServiceName.cpp ServiceName.h source_constants.cpp source_constants.h source_types.cpp source_types.h 以及一个服务器端文件 ServiceName_server.skeleton.cpp, 你可以在这里实现函数体
编写客户端文件client.cpp 该文件可以参考ServiceName_server.skeleton.cpp编写, 需要我们修改几个地方 首先删除没用的类定义 然后添加需要的头文件#include <thrift/transport/TSocket.h> 再修改main函数如下
int main(int argc, char **argv) { shared_ptr<TSocket> socket(new TSocket("127.0.0.1", 9090)); shared_ptr<TTransport> transport(new TBufferedTransport(socket)); shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport)); ServiceNameClient client(protocol); try { transport->open(); } catch (TTransportException) { transport->close(); } //随意调用thrift文件定义好的函数 int ret_int1 = client.func1(); int ret_int2 = client.func2(arg1, arg2); ... transport->close(); return 0; }使用Visual Studio分别创建服务器端和客户端工程即可编译出相应的程序,可以自己尝试运行一下
有些同学可能不知道如何使用Visual Studio进行编译,顺便说一下 服务器端: 首先创建一个名为server的空工程,删除多余的文件,把thrift compiler编译出的所有文件都加到工程里去,并在工程配置中添加相应的Additional Include Directories,Additional Library Directories和Additional Dependencies即可 客户端: 首先创建一个名为client的空工程,删除多余的文件,把所有公用文件都加到工程里去,再加入上面写的那个client.cpp文件,并在工程配置中添加相应的Additional Include Directories,Additional Library Directories和Additional Dependencies即可
以下配置值仅供参考 Additional Include Directories = $(BOOST_ROOT);thrift\lib\cpp\src;$(OPENSSL_ROOT_DIR)\include Additional Library Directories = $(BOOST_ROOT)\stage\lib;thrift\lib\cpp\$(Configuration);$(OPENSSL_ROOT_DIR)\lib Additional Dependencies = libthrift.lib;libthriftnb.lib;libcrypto.lib;libssl.lib