windows下hiredis的编译



windows下hiredis的编译,有需要的朋友可以参考下。

果然,高端的程序员真心是鸟都不鸟windows的,redis的客户端找了一圈愣是没有C++的windows版本

我要做个windows上的C++的服务器都没办法和redis交互

github上所有能试的我都试过了,要么是只支持unix,要么是怎么编译都不通过,焦头烂额中

然后我总结了网上无数的教程,附带修复一个个编译错误,总结如下

编译环境,64位windows7 ultimate,VS2013 Ultimate

1.获取redis windows版

MS Open Technologies 官方主页

GitHub上的MSOpenTech/redis项目地址

2.编译两个lib: hiredis.lib和Win32_Interop.lib

打开从GitHub上clone下来的文件夹,打开里面的msvs文件夹中的RedisServer.sln

从解决方案资源管理器窗口编译hiredis工程和Win32_Interop工程(调试的时候请在debug模式下编译这两个库),此时便会在Debug/Release文件夹下生成这两个工程编译的lib

3.在自己的工程中使用

(1)添加上一步编译的这两个lib到工程中

(2)复制GItHub redis项目文件夹中src/Win32_Interop下所有头文件

(3)以及deps/hiredis下所有头文件(其中fmacros.h用src文件夹下的fmacros.h文件替代)

(4)再复制src/Win32_Interop/win32fixes.c到自己的工程目录,包含到工程文件中

(5)调整各个文件include的路径

(6)示例代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <hiredis.h>
#define NO_QFORKIMPL //这一行必须加才能正常使用
#include <Win32_Interop\win32fixes.h>
#pragma comment(lib,"hiredis.lib")
#pragma comment(lib,"Win32_Interop.lib")

int main()
{
	unsigned int j;
	redisContext *c;
	redisReply *reply;

	struct timeval timeout = { 1, 500000 }; // 1.5 seconds
	c = redisConnectWithTimeout((char*)"127.0.0.1", 6379, timeout);
	if (c->err) {
		printf("Connection error: %s\n", c->errstr);
		exit(1);
	}

	/* PING server */
	reply = (redisReply *)redisCommand(c, "PING");
	printf("PING: %s\n", reply->str);
	freeReplyObject(reply);

	/* Set a key */
	reply = (redisReply *)redisCommand(c, "SET %s %s", "foo", "hello world");
	printf("SET: %s\n", reply->str);
	freeReplyObject(reply);

	/* Set a key using binary safe API */
	reply = (redisReply *)redisCommand(c, "SET %b %b", "bar", 3, "hello", 5);
	printf("SET (binary API): %s\n", reply->str);
	freeReplyObject(reply);

	/* Try a GET and two INCR */
	reply = (redisReply *)redisCommand(c, "GET foo");
	printf("GET foo: %s\n", reply->str);
	freeReplyObject(reply);

	reply = (redisReply *)redisCommand(c, "INCR counter");
	printf("INCR counter: %lld\n", reply->integer);
	freeReplyObject(reply);
	/* again ... */
	reply = (redisReply *)redisCommand(c, "INCR counter");
	printf("INCR counter: %lld\n", reply->integer);
	freeReplyObject(reply);

	/* Create a list of numbers, from 0 to 9 */
	reply = (redisReply *)redisCommand(c, "DEL mylist");
	freeReplyObject(reply);
	for (j = 0; j < 10; j++) {
		char buf[64];

		sprintf_s(buf, 64, "%d", j);
		reply = (redisReply *)redisCommand(c, "LPUSH mylist element-%s", buf);
		freeReplyObject(reply);
	}

	/* Let's check what we have inside the list */
	reply = (redisReply *)redisCommand(c, "LRANGE mylist 0 -1");
	if (reply->type == REDIS_REPLY_ARRAY) {
		for (j = 0; j < reply->elements; j++) {
			printf("%u) %s\n", j, reply->element[j]->str);
			getchar();
		}
	}
	freeReplyObject(reply);

	return 0;
}

PS.可能会碰到的编译错误

1.必须定义入口点,请在win32fixes.h之前加上#define NO_QFORKIMPL

2.各种与其他库的使用冲突,请右击项目->属性->配置属性->C/C++->代码生成->运行库->改成多线程调试(/MTd)或多线程(/MT)

并且在右击项目->属性->配置属性->连接器->命令行中输入/NODEFAULTLIB:libcmt.lib

3.error C4996,各种unsafe报错啊,请右击项目->属性->配置属性->C/C++->预处理器->预处理器定义->添加“_CRT_SECURE_NO_WARNINGS”(不带引号)

时间: 2024-09-20 05:39:39

windows下hiredis的编译的相关文章

windows下用vs2010编译ffmpeg

转载自;http://q1q2q3q4q5q6ln.blog.163.com/blog/static/500794332014666536283/ (注意:请务必先阅读:七,后记补充:) ffmpeg是一个开源的多媒体库,使用非常广泛.在linux下编译ffmpeg非常简单,而在Windows下编译就不是那么容易了.一般在windows下使用MinGW的gcc toolchain进行编译,这样的话,因为ffmpeg的导出函数均是C风格,因而gcc编译的lib可以被vs链接.但是gcc的debug

windows下开发并编译PHP扩展的方法

现在就简单说一在WINDOWS下开发PHP扩展的步骤: 首先需要准备的软件有: cygwin 安装路径e:\app\cygwin visual studio C++ 6.0, 修改环境变量,把已经安装好的PHP路径设置为环境变量.在这里,假设我的PHP安装目录是:e:\app\php5.2.5,那么我把WINDOWS环境变量后面加上这个安装目录.方便一会儿使用php.exe. PHP源代码,这里假设为e:\c_source_code\php-5.2.5 1.修改文件 "PHP源文件目录/ext/

windows下开发并编译PHP扩展的方法_php技巧

现在就简单说一在WINDOWS下开发PHP扩展的步骤: 首先需要准备的软件有: cygwin 安装路径e:\app\cygwin visual studio C++ 6.0, 修改环境变量,把已经安装好的PHP路径设置为环境变量.在这里,假设我的PHP安装目录是:e:\app\php5.2.5,那么我把WINDOWS环境变量后面加上这个安装目录.方便一会儿使用php.exe. PHP源代码,这里假设为e:\c_source_code\php-5.2.5 1.修改文件 "PHP源文件目录/ext/

windows下cmd命令编译C++

  我已经装了Visual Studio,那么我应该好好利用其cl编译器.OK,步骤记录如下(这里说明一下,我的环境是Windows 7 + Visual Studio 2010,其中VS 2010安装位置是D盘):   1.修改环境变量      在系统属性-高级-环境变量-用户变量中:      编辑PATH增加cl编译器的路径D:/Program Files/Microsoft Visual Studio 10.0/VC/bin以及MSPDB60.DLL的路径D:/Program File

Sublime Text 3配置Windows下C/C++编译环境

在Linux或者Mac OS中我们选择[工具 / 编译系统 / C++(Tools / Build System / C++)]就可以配置C/C++的编译环境,但是在Windows环境下,我们却需要做更多的设置 首先我们需要设置MinGW编译器的环境变量,使我们可以直接使用gcc/g++命令,这点我们就不重复了,不会的请大家自行脑补 我们直接讲Sublime Text的配置方法 工具 / 编译系统 / 编译新系统(Tools –> Build System –> New Build Syste

windows 下FFMPEG的编译方法 附2012-9-19发布的FFMPEG编译好的SDK下载

经过一晚上加一上午的奋斗,终于成功编译出了最新版的FFMPEG,下面是我编译的心得,因为是最新的,应该会对大家有用,编译的FFMPEG的版本是0.11.2,2012-09-19新发布的版本   平台:WINDOWS XP,MinGW+MSYS 一.下载FFMPEG 大家可以到FFMPEG官网上去下载最新版:http://ffmpeg.org/download.html现在的最新版就是我编译的版本: 其实我更喜欢下面这个地址,直接列出来所有的供下载的版本:http://ffmpeg.org/rel

Windows下使用Cygwin编译MySQL客户端_Mysql

MinTTY 是一个小巧但却很实用的 Cygwin 终端机,但有个严重的问题就是无法调用交互性的 Windows 原生程序,比如说 mysql.exe,当你在 MinTTY 中输入如下的命令: 复制代码 代码如下: $ mysql -uroot -p 本来 mysql.exe 会提示输入密码,但在 MinTTY 中程序会直接挂起,不再响应,实际上即使在 -p 参数后面跟上密码,也是一样的. 某些程序,比如 python,会提供参数 -i,使自身在终端中进入交互模式,可惜并非所有的程序都有这样的参

Windows下Qt 重新编译库文件

首先要设置好环境变量,因为重新编译要调用cl.exe 和nmake.exe. 最简单的设置方法是运行,D:/Microsoft Visual Studio 9.0/Common7/Tools/vsvars32.bat  再运行,D:/Qt/4.6.3/configure.exe .按照提示一步步选择就行了.也可以看下一些选项. 据说 -static 参数可以编译静态链接库.(未测试,因为下面运行nmake一次时间很久!!我用了好几个小时--)   运行完之后,运行nmake.这个时间要很久--

c++-关于CuraEngine在windows下编译问题

问题描述 关于CuraEngine在windows下编译问题 大神求助,最近在研究CuraEngine,但是在windows下怎么也编译不通过,在编译Arcus的时候工程就编译不用过 有没有遇到过这样情况的,一起研究研究啊,谢谢啊 解决方案 什么编译错误,你需要根据具体错误来解决,可能是环境配置不正确等 解决方案二: 现在在配制Arcus时,编译报错 解决方案三: http://blog.csdn.net/fhln609353626/article/details/48007755 解决方案四: