thrift c++ windows 依赖哪些库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thrift c++ windows 依赖哪些库相关的知识,希望对你有一定的参考价值。

1)安装thrift:到thrift官网下载exe文件,然后将文件重命名为thrift.exe,拷贝到c:\windows目录下,然后就可以在dos环境下使用了

如:thrift -gen Java D:\mywork\javaProject\thriftTest\test.thrift ,输出的java文件默认输出到当前目录下,也可以使用-o参数指定输出路径
2)下载相关依赖包
2.1)libthrift.jar ,下载地址:http://repo1.maven.org/maven2/org/apache/thrift/libthrift/0.9.0/
2.2)slf4j-api.jar
2.3)slf4j-simple.jar
3)编写thrift 接口文件

[java] view plain copy
namespace cpp zam.thrift.test
namespace py thriftTest
namespace java com.zam.thrift.test
namespace php thriftTest

service Hello
string helloString(1:string word)

4)编写接口实现代码

[java] view plain copy
package com.zam.server;

import org.apache.thrift.TException;

import com.zam.thrift.test.Hello.Iface;

public class HelloImpl implements Iface
private static int count = 0;

@Override
public String helloString(String word) throws TException
// TODO Auto-generated method stub
count += 1;
System.out.println("get " + word + " " +count);
return "hello " + word + " " + count;



5)编写server代码

[java] view plain copy
package com.zam.server;

import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TBinaryProtocol.Factory;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.server.TThreadPoolServer.Args;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TTransportException;

import com.zam.thrift.test.Hello;
import com.zam.thrift.test.Hello.Processor;

public class Server
public void startServer()
try
System.out.println("thrift server open port 1234");
TServerSocket serverTransport = new TServerSocket(1234);
Hello.Processor process = new Processor(new HelloImpl());
Factory portFactory = new TBinaryProtocol.Factory(true, true);
Args args = new Args(serverTransport);
args.processor(process);
args.protocolFactory(portFactory);
TServer server = new TThreadPoolServer(args);
server.serve();
catch (TTransportException e)
e.printStackTrace();



public static void main(String[] args)
System.out.println("thrift server init");
Server server = new Server();
System.out.println("thrift server start");
server.startServer();
System.out.println("thrift server end");


6)编写client 代码

[java] view plain copy
package com.zam.server;

import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;

import com.zam.thrift.test.Hello;

public class Client
public void startClient()
TTransport transport;
try
System.out.println("thrift client connext server at 1234 port ");
transport = new TSocket("localhost", 1234);
TProtocol protocol = new TBinaryProtocol(transport);
Hello.Client client = new Hello.Client(protocol);
transport.open();
System.out.println(client.helloString("panguso"));
transport.close();
System.out.println("thrift client close connextion");
catch (TTransportException e)
e.printStackTrace();
catch (TException e)
e.printStackTrace();



public static void main(String[] args)
System.out.println("thrift client init ");
Client client = new Client();
System.out.println("thrift client start ");
client.startClient();
System.out.println("thrift client end ");


8)运行server和client代码

8.1)启动server端

[html] view plain copy
thrift server init
thrift server start
thrift server open port 1234
8.2)启动client端

[html] view plain copy
thrift client init
thrift client start
thrift client connext server at 1234 port
hello panguso 1
thrift client close connextion
thrift client end
参考技术A 我目前使用的thrift版本是0.8.0。我整理一下我的步骤:

1.从boost pro下载安装boost库,包括源文件和lib库。

2.从libevent官网下载libevent库,只有源文件。

3.从thrift官网,使用svn方式下载thrift库,只有源文件。(千万别用压缩包版本的Release发布包,里面的路径都不对)

4.在thrift库的cpp文件夹里,有libthrift和libthriftnb两个工程,这两个工程都可以直接使用VS2010打开。
其中,libthrift需要链接boost的源文件,引用boost lib库。
而libthriftnb不仅仅需要boost的源文件和boost lib库,还需要引用libevent源文件。
然后就可以编译libthrift和libthriftnb两个工程。

5.在thrift的svn的tutorial目录下,用thrift-0.8.0.exe编译tutorial.thrift和shared.thrift,会得到一堆cpp和h文件。这时,新建一个C++ Console空工程,把这些文件都引入。
期间还需要做一些小修正:
5.1 删除thrift文件里的D语言(因为没有这语言的编译器)
5.2 删除shared的skeleton.cpp(防止与Calculator的skeleton.cpp的main冲突)
5.3 为CalculatorHandler类增加一个getStruct函数实现(防止VS2010报错说不能实例化虚类,getStruct方法的内容为空,返回值和参数,直接复制SharedServiceIf.h里的)

boost 库是不是依赖于 std C++ 库?

【中文标题】boost 库是不是依赖于 std C++ 库?【英文标题】:Does the boost library depend on the std C++ library?boost 库是否依赖于 std C++ 库? 【发布时间】:2010-09-14 23:48:31 【问题描述】:

我们需要在 Windows 平台上编写小型快速代码,我知道在某些情况下 boost 仅具有标头实现。它们需要很小是有原因的,所以我们一直小心不要因为大小而实际使用标准 C++ 库。

我的问题是,使用 boost asio 或 system 是否也会在 windows 下的 std C++ 库中拖拽?

编辑:是的,小而快。我知道 std c++ 库的某些部分即使不比 C 快也非常快。但是,大小对我们来说是一个因素,因为最终用户会即时下载它们,我们不希望任何主要依赖项或大量下载,例如拉入 MFC 使用一个功能!我们倾向于将 C++ 用作 C++ 的扩展版本。只使用对象,没有 RTTI,没有 IO 流。

我想我的问题可以归结为: boost 的哪些部分可能使用流库? ASIO 会不会让我的代码膨胀,而不仅仅是直接使用 win32 API?

【问题讨论】:

仅标头库(即任何模板化的库)往往会使应用程序大小膨胀,而不是缩小,因为实现是内联的而不是共享的。如果你的目标是小,你最好使用 C 而不是 C++。如果不编写大量自定义代码,C++ 的小而快是很困难的。现在,您可能会在发布模式下使用 Windows 上的整个程序优化获得一些运气。它可能能够消除冗余代码,但需要在大小和速度之间进行权衡。 @Nathan:只需通过编译器选项优化大小而不是速度。这一点都不难。如果模板实例化仍然占用太多,只需将 T 更改为 void* 并进行强制转换。 (贸易安全和易用性的大小。)C++ 到 C 不仅仅依赖于模板。 使用标准库如何导致代码量大?我怀疑你自己实现的任何执行相同功能的东西都会变得更小(iostream 可能除外) @GMan,我在做一个概括。我讨厌消除安全性(一旦你介绍了 C,我就知道,你已经完成了)。老实说,我认为 OP 最好自然地编写代码然后配置文件以查看在哪里提高速度。即使在当今功能最差的计算机上,我也几乎不认为 C++ 标准库中的链接是一个问题。 @Nathan:一个不真实的概括。使编译器可能内联通常不会导致代码膨胀。编译器并不愚蠢,除非回报值得,否则不会内联。经常与模板相关的代码膨胀有不同的原因 【参考方案1】:

当然,Boost 只是提供了一个抽象层。它必须在某些时候使用 C++ STL 库。如果你不相信我,请检查代码。

【讨论】:

称它为 STL 或 stdlib,但请不要称它为 STD 库 ;v) The STL is part of C++. I don't understand why people act like it is not. 编辑前更好... +1 为它是什么 C++ 标准库和“STL”不是一回事。当然,部分 SGI STL 被合并到 C++ 标准库中,但将整个 C++ 标准库简单地称为“STL”是完全不正确的。例如,数学库不是 STL 的一部分,而是 C++ 标准库的一部分。 @James:这有关系吗?让 Herb Sutter 和 Scott Meyer 停止错误地使用术语“STL”,然后我承认它可能也值得向 SO 用户宣讲。但在那之前,这只是一种“我比你更迂腐”的炫耀。实际上,如果您询问 C++ 程序员,STL 并不是指 SGI 库,而是指派生自所述 SGI 库的 C++ 标准库的子集。 @SimpleCoder:Boost 根本没有 使用 STL。这样做很方便,但肯定没有必要。他们本可以使用 C 标准库,甚至可以依赖特定于操作系统的功能并自己提供一切。【参考方案2】:

Boost 可以很好地使用 STL 或其他 C++ 标准库,但我认为你最好的选择不是对此有偏见,而只是尝试包含 ASIO 或任何你需要的东西,看看你的编译/优化模块是否仍然很小足以满足您的要求。

您提到“小而快”,好像 STL 并不小或快,但它在两个方面都非常紧凑,也许它仍能满足您的要求——它被设计为非常高效...

【讨论】:

以上是关于thrift c++ windows 依赖哪些库的主要内容,如果未能解决你的问题,请参考以下文章

windows使用thrift c++ 需要编译lib吗

thrift安装及python和c++版本调试

thrift在C++中的应用

thrift静态库问题

C++学习(三七三)windows android依赖库的顺序

boost 库是不是依赖于 std C++ 库?