Win7+VS2013初试Thrift
win7环境下VS2013编译boost_1_58_0步骤:
- 官网下载boost_1_58_0(直接下载),解压
- cmd窗口cd到boost_1_58_0,执行bootstrap.bat
- cmd窗口获取动态库命令:bjam install stage --toolset=msvc-12.0 -- stagedir="C:\Boost\boost_vc_120" link=shared runtime-link=shared threading=multi debug release cmd窗口获取静态库命令:bjam install stage --toolset=msvc-12.0 -- stagedir="C:\Boost\boost_vc_120" link=static runtime-link=static threading=multi debug release
- cmd窗口运行:b2 install
- 完毕后会在C:\Boost目录下生成include和lib两个目录,其中lib目录和include目录下boost-1_58这两个目录为编译成功后得到的两个目录
- 新建Win32 Console Application项目,Console application+Empty project,去掉Precomplied header前面的勾。
- 工程上右键Properties,C++里的General,Additional Include Directiories添加boost-1_58目录
- Linker里的General,Additional Library Directories添加lib目录
- 添加source.cpp,代码如下,编译,如果成功代表boost编译成功
#include <iostream>
#include <boost/thread/thread.hpp> void hello()
{
std::cout << "Hello world, I'm a thread!" << std::endl;
}
int main()
{
boost::thread thrd(&hello);
thrd.join();
}
win7环境下VS2013编译libevent-2.0.22-stable步骤:
- 官网下载libevent-2.0.22-stable(使用git)
- 修改以下三个文件libevent-2.0.22-stable\event_iocp.c,libevent-2.0.22-stable\evthread_win32.c,libevent-2.0.22-stable\listener.c,在这三个文件开头添加宏定义#define _WIN32_WINNT 0x0500
- Microsoft visual studio 2013命令行工具,cd到levent-libevent目录,执行nmake /f Makefile.nmake
- 编译成功后,在当前目录会生成三个lib,分别为:libevent_core.lib,libevent_extras.lib和libevent.lib
- 新建一个lib目录,将这三个lib文件拷贝到此目录;新建一个include目录,将libevent-2.0.22-stable\include目录下的文件和文件夹拷贝到此目录下,将libevent-2.0.22-stable\WIN32-Code下的文件和libevent-2.0.22-stable\WIN32-Code\nmake下的目录和文件拷贝到此目录下,2个event2目录下的文件直接合并即可
- 新建Win32 Console Application项目,Console application+Empty project,去掉Precomplied header前面的勾。
- 工程上右键Properties,VC++ Directories里的Include Directories添加include目录,Library Directories添加lib目录
- C++里的Code Generation,Runtime Library选择Multi-threaded Debug (/MTd)(Debug下),Multi-threaded (/MT)(Release下)
- Linker里的Input,Additional Dependencies添加ws2_32.lib;wsock32.lib;libevent.lib;libevent_core.lib;libevent_extras.lib;
- 添加source.cpp,代码如下,启动项目,打开cmd输入(需要在控制面板\打开windows功能中勾选telnet客户端):telnet 127.0.0.1 55555,效果图如下:
source.cpp源码如下:
#include <string.h>
#include <errno.h>
#include <stdio.h>
#include <signal.h> #ifndef WIN32
#include <netinet/in.h>
# ifdef _XOPEN_SOURCE_EXTENDED
# include <arpa/inet.h>
# endif
#include <sys/socket.h>
#endif #include "event2/bufferevent.h"
#include "event2/buffer.h"
#include "event2/listener.h"
#include "event2/util.h"
#include "event2/event.h" #include <WinSock2.h> static const char MESSAGE[] = "Hello, World!\n"; static const int PORT = ; static void conn_writecb(struct bufferevent *bev, void *user_data)
{
struct evbuffer *output = bufferevent_get_output(bev);
if (evbuffer_get_length(output) == )
{
printf("flushed answer\n");
bufferevent_free(bev);
}
} static void conn_eventcb(struct bufferevent *bev, short events, void *user_data)
{
if (events & BEV_EVENT_EOF)
{
printf("Connection closed.\n");
}
else if (events & BEV_EVENT_ERROR)
{
printf("Got an error on the connection: %s\n",
strerror(errno));/*XXX win32*/
}
/* None of the other events can happen here, since we haven't enabled
* timeouts */
bufferevent_free(bev);
} static void signal_cb(evutil_socket_t sig, short events, void *user_data)
{
struct event_base *base = (struct event_base *)user_data;
struct timeval delay = { , }; printf("Caught an interrupt signal; exiting cleanly in two seconds.\n"); event_base_loopexit(base, &delay);
} static void listener_cb(struct evconnlistener *listener, evutil_socket_t fd,
struct sockaddr *sa, int socklen, void *user_data)
{
struct event_base *base = (struct event_base *)user_data;
struct bufferevent *bev; bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE);
if (!bev)
{
fprintf(stderr, "Error constructing bufferevent!");
event_base_loopbreak(base);
return;
}
bufferevent_setcb(bev, NULL, conn_writecb, conn_eventcb, NULL);
bufferevent_enable(bev, EV_WRITE);
bufferevent_disable(bev, EV_READ); bufferevent_write(bev, MESSAGE, strlen(MESSAGE));
} int main(int argc, char **argv)
{
struct event_base *base;
struct evconnlistener *listener;
struct event *signal_event; struct sockaddr_in sin; #ifdef WIN32
WSADATA wsa_data;
WSAStartup(0x0201, &wsa_data);
#endif base = event_base_new();
if (!base)
{
fprintf(stderr, "Could not initialize libevent!\n");
return ;
} memset(&sin, , sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(PORT); listener = evconnlistener_new_bind(base, listener_cb, (void *)base,
LEV_OPT_REUSEABLE|LEV_OPT_CLOSE_ON_FREE, -,
(struct sockaddr*)&sin,
sizeof(sin)); if (!listener)
{
fprintf(stderr, "Could not create a listener!\n");
return ;
} signal_event = evsignal_new(base, SIGINT, signal_cb, (void *)base); if (!signal_event || event_add(signal_event, NULL)<)
{
fprintf(stderr, "Could not create/add a signal event!\n");
return ;
} event_base_dispatch(base); evconnlistener_free(listener);
event_free(signal_event);
event_base_free(base); printf("done\n");
return ;
}
win7环境下VS2013编译openssl步骤:
- 下载安装ActivePerl,官网下载openssl源码(使用git,若在官网上下载压缩包解压会出现错误<不知道为什么?>)
- Microsoft visual studio 2013命令行工具,cd到openssl目录
- 执行命令:perl Configure VC-WIN32 no-asm --prefix=c:\openssl_lib
- 执行命令:ms\do_ms
- 执行命令:nmake -f ms\ntdll.mak (编译动态库) nmake -f ms\nt.mak (编译静态库)
- 执行命令:nmake -f ms\ntdll.mak install (装载动态库) nmake -f ms\nt.mak install (装载静态库)
- 执行命令:nmake -f ms\ntdll.mak test (测试动态库) nmake -f ms\nt.mak test (测试静态库)
- openssl目录下的include和lib即为编译成功后得到的两个目录
- 新建Win32 Console Application项目,Console application+Empty project,去掉Precomplied header前面的勾。
- 工程上右键Properties,C++里的General,Additional Include Directiories添加include目录
- Linker里的General,Additional Library Directories添加lib目录
- 添加source.cpp,代码如下,启动项目
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <openssl/bn.h>
#include <openssl/ec.h>
#include <openssl/rand.h>
#include <openssl/err.h>
#include <openssl/ecdsa.h>
#include <openssl/ecdh.h> #pragma comment(lib, "libeay32.lib") int main()
{ return ;
}
win7环境下VS2013编译thrift步骤:
- 下载thrift-0.9.2(本人使用git下载源码包)
- 打开thrift-0.9.2\lib\cpp下的sln项目,按照上文所述步骤依次为两个项目(libthrift和libthriftnb,两种模式)添加boost、libevent和openssl依赖项,编译Solution即可得到这两种模式下对应的lib文件(分别为libthrift.lib和libthriftnb.lib)和一个src目录。(注意debug版本和release版本需要分别添加,在solution上右键Properties的Configuration上改变编译方式,分别编译可得到这两种版本对于的四个lib文件)
初试thrift:
- 下载thrift-0.9.2.exe,更名为thrift.exe,准备运行源码包里的cpp例程(在thrift-0.9.2\tutorial目录下,包括shared.thrift、tutorial.thrift和thrift-0.9.2\tutorial\cpp目录下的CppClient.cpp和CppServer.cpp)
- 新建目录ThriftCreateCode,将thrift.exe放入,将shared.thrift和tutorial.thrift这两个文件拷贝到当前目录,cmd窗口cd到ThriftCreateCode,依次执行命令:thrift --gen cpp shared.thrift和thrift --gen cpp tutorial.thrift(这两个命令部分先后),将会在当前目录下产生gen-cpp,此目录下将会产生多个.h和.cpp文件,如下图(其中两个_server.skeleton.cpp为给的示例server代码,供参考):
- 新建Solution,取名为ThriftCPPTest,并新建两个Win32 Console Application项目,Console application+Empty project,去掉Precomplied header前面的勾,分别为Client和Server。
- 分别为Client和Server添加thrift依赖项:工程上右键Properties,VC++ Directories里的Include Directories添加src目录,Library Directories添加lib目录(包含debug或者release里的两个lib文件);C++里的Code Generation,Runtime Library选择Multi-threaded Debug (/MTd)(Debug下),Multi-threaded (/MT)(Release下);Linker里的Input,Additional Dependencies添加libthrift.lib;libthriftnb.lib;
- 分别为Client和Server添加Boost依赖项
- 分别为Client项目和Server项目添加相对应的.h和.cpp文件,添加的文件和运行效果见下图:
最后我想说一句,对这些开源项目,真特么是操蛋,网上资料很杂,一种一种的试,我真是醉了。
本文参考资料:
win7环境下VS2013编译boost_1_58_0:http://jingyan.baidu.com/article/a3aad71aa1ebe7b1fb009681.html
win7环境下VS2013编译libevent-2.0.22-stable步骤:http://www.cnblogs.com/luxiaoxun/p/3603399.html
http://zengwu3915.blog.163.com/blog/static/2783489720153402449305/
win7环境下VS2013编译openssl:http://blog.csdn.net/liuhongxiangm/article/details/18400837
http://blog.sina.com.cn/s/blog_55feec4101010x51.html
thrift初试:http://blog.csdn.net/hbuxiaoshe/article/details/6558391
Win7+VS2013初试Thrift的更多相关文章
- cocos2d-x -3.81+win7+vs2013开发环境创建新的项目
cocos2d-x -3.81+win7+vs2013开发环境创建新的项目 1.准备阶段 (1) vs2013下载及安装 (2)cocos2d-x 3.8.1下载及解压 (3)python下载及安装( ...
- Win7 & VS2013 编译 WebKit 总结
[转载请注明Moon出品: http://blog.csdn.net/lzl124631x] 距离上次编译WebKit(实际日期是2012年10月)已经过去一年多了, 这期间有很多人问我编译相关的 ...
- caffe+win7+vs2013 仅CPU环境安装
笔者对深度学习一直充满着好奇与兴趣,之前学校都是研究图像处理的特征点方式,机器学习使用也不多,别提深度学习了. 在看了李宏毅大佬的PPT后,有了初步的认识,虽然是渣渣电脑,也想自己跑几个深度模型. 说 ...
- 64bit win7+VS2013+opencv2.4.9配置
我的配置是opencv2.4.9与VS2013,在win7 64bit下. 从opencv官网(http://opencv.org/downloads.html),下载安装文件,然后双击安装包,类似于 ...
- windows下配置caffe(环境:win7+vs2013+opencv3.0)
说明:大部分转载于initialneil的大作Caffe + vs2013 + OpenCV in Windows Tutorial (I) – Setup 准备工作: 1.下载CUDA7.5: ht ...
- Win7 VS2013环境编译Squirrel 3.0.7
Squirrel是一个类似Lua,但是更面向对象的脚本语言. 国内这个介绍很少,环境配置更是没有任何文章提到,花了点时间搞定了,备忘记录下过程. 首先是下载,写本文时Squirrel最新版本为3.0. ...
- Win7 VS2013环境编译Lua5.3.1
主要参考这篇文章,原文有几个错误顺便改正了. 在Windows下使用Visual Studio编译Lua5.3 写本文时Lua官方网站放出的新版本为5.3.1,然后我不知道为啥,神奇的国内不能访问Lu ...
- Win7 VS2013环境编译boost1_58_0
备忘,发现好多不常用的东西不记笔记再想用要重新花时间找,所以试着开始记笔记,写入博客吧. 首先去官网下最新的版本 http://www.boost.org/ 写本文时boost最新版本为1_58_0, ...
- OpenCV - win7+vs2013(2012)+opencv3.0.0 环境配置 (以及配置技巧)
1. opencv 3.0.0 库下载地址, 这里的版本是3.0.0,其他的版本配置可能不一样,请大家注意. http://sourceforge.net/projects/opencvlibrary ...
随机推荐
- java异常——RuntimeException和User Define Exception
1.RuntimeException public class RuntimeException { public static void main(String[] args) { // TODO ...
- 【PPT分享】五类常见的用户分析场景
以下是参加一次沙龙的PPT,分享给大家.关于如何做用户分析的5类场景. 引言 借助“多渠道营销分析”,探究用户从哪里来?如何来? 平台和渠道矩阵 平台和渠道矩阵 跨平台和渠道访问特征分析 多渠道来源分 ...
- thrift 安装介绍
一.About thrift thrift是一种可伸缩的跨语言服务的发展软件框架.它结合了功能强大的软件堆栈的代码生成引擎,以建设服务,工作效率和无缝地与C + +,C#,Ja ...
- 【CCS仿真】如何将CCS仿真时memory中的数据以Hex、Integer、 Long 、Float、 Addressable Unit类型保存到PC
2013-12-04 19:07:05 将在CCS中仿真的数据导入电脑上时,可以选择不同的数据类型,以便分析,具体方法如下: 在CCS菜单中,选择File—>Data—>Save,弹出以下 ...
- Oracle中添加视图
CREATE or REPLACE view view_will as select college.collegeid,mat.stuid,sum(score.chinese+score.ma ...
- Winform——计算器
namespace 计算器2._0 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } pr ...
- How can I work smarter, not just harder? Ask it forever
How can I work smarter, not just harder? 记住,永远要问自己这个问题.当你发现在做一件事情时,总是那么的繁琐无味,那么一定是出了什么问题. 如果一味地强调更加 ...
- HDU 1907 (博弈) John
参见上一篇博客,里面有分析和结论. #include <cstdio> int main() { int T; scanf("%d", &T); while(T ...
- UVa 10474 Where is the Marble
题意:给出一列数,先排序,再查找学习了sort函数,lower_bound函数sort:可以给任意对象排序(包括自己定义的)(前提是定义好了‘<’运算符)lower_bound:查找大于或者等于 ...
- Servlet的页面跳转
Servlet的跳转 内部跳转 req.getRequestDispatcher() Server--->AServlet--->BServlet 两个S ...