果然,高端的程序员真心是鸟都不鸟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”(不带引号)

【数据库开发】windows下hiredis的编译(主要是包括一些异步编程的错误)的更多相关文章

  1. 手把手教你在Windows下使用MinGW编译libav(参考libx264的编入)

    转自:http://www.th7.cn/Program/cp/201407/242762.shtml 手把手教你在Windows下使用MinGW编译libav libav是在Linux下使用纯c语言 ...

  2. 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集

    上一篇记录的是学习caffe前的环境准备以及如何创建好自己需要的caffe版本.这一篇记录的是如何使用编译好的caffe做训练mnist数据集,步骤编号延用上一篇 <实践详细篇-Windows下 ...

  3. windows下用vs2010编译ffmpeg

    转载自;http://q1q2q3q4q5q6ln.blog.163.com/blog/static/500794332014666536283/ (注意:请务必先阅读:七,后记补充:) ffmpeg ...

  4. Windows下从源代码编译Skia

    在PPAPI里面画图,能够结合第三方的图形库.比方Cairo.Skia. Google Chrome.Chromium和Android都使用Skia作为画图引擎.我也来试试Skia,先过编译关. fo ...

  5. iOS系统提供开发环境下命令行编译工具:xcodebuild

    iOS系统提供开发环境下命令行编译工具:xcodebuild[3] xcodebuild 在介绍xcodebuild之前,需要先弄清楚一些在XCode环境下的一些概念[4]: Workspace:简单 ...

  6. 【转】Windows下使用VS2008编译OpenCV 2.1 添加Intel TBB和Python支持

    Windows下使用VS2008编译OpenCV2.1 添加Intel TBB和Python支持 步骤: 1.仔细阅读OpenCV官网上的InstallGuide:http://opencv.will ...

  7. 在windows下使用vs2013编译和调试mysql源代码

    1. 准备工作 1)OS:win10 + VS2013 2)mysql 源码(windows版):mysql-5.6.25.zip 3)perl tool:ActivePerl-5.16.3.1604 ...

  8. windows下使用cmake编译zlib与libpng libjpeg

    win7下使用VS2010编译jpeglib 1.下载源代码下载地址:http://www.ijg.org/files/,     选择最新版本的windows版本压缩包,进行下载.     jpeg ...

  9. Windows下使用MINGW编译ffplay

    之前考虑到需要快速配置编译ffplay,使用了比较暴力的方法,具体可以参考编译ffplay.exe简化版. 这里介绍下相对规范的做法. 前提:已经安装了Windows下GCC开发环境--MINGW+m ...

随机推荐

  1. [Angular] Using Pipe for function memoization

    Sometimes we might have some expensive function to calcuate state directly from template: <div cl ...

  2. java线程中yield(),sleep(),wait()区别详解

    1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据.注意该方 ...

  3. AcWing P378 骑士放置 题解

    Analysis 这道题跟前几道题差不多,依旧是匈牙利算法求二分图匹配,在连边的时候,要连两个矛盾的位置(即一个骑士和其控制的位置).然后就跑一遍匈牙利算法就好了. #include<iostr ...

  4. CF1051D Bicolorings 递推

    考试T2,随便推一推就好了~ code: #include <bits/stdc++.h> #define N 1015 #define mod 998244353 #define ll ...

  5. leetcode解题报告(20):Rotate Array

    描述 Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the arr ...

  6. 2019ICPC徐州自我反省及未来打算

    徐州站结束了有好几天了,然而为了热爱的网络课(qdu-zpj网络课你值得信赖),一直没时间写个博客,今天又来说点心里话 今年的ICPC,就这样都打完了,可惜最终也是没能拿金,不过拿到了块银,也算保底吧 ...

  7. 使用DRBD+KEEPALIVED来实现NFS高可用

    目录 一 DRBD介绍 二 DRBD的模式 三 DRBD的同步协议 四 实验环境 五 安装配置 关于脑裂(split-brain)处理 一 DRBD介绍 DRBD(Distributed Replic ...

  8. spark2.1.0的源码编译

    本文介绍spark2.1.0的源码编译 1.编译环境: Jdk1.8或以上 Hadoop2.7.3 Scala2.10.4 必要条件: Maven 3.3.9或以上(重要) 点这里下载 http:// ...

  9. Java学习日记基础(五)——类、对象之this、静态变量(类变量)、静态方法(类方法)、四大特征

    this 赵本山问奥尼尔:“我的爸爸的爸爸是谁?” 奥尼尔:“不知道” 赵本山:“你傻啊,是我爷爷” 奥尼尔回去问科比:“我的爸爸的爸爸是谁?” 科比:“不知道” 奥尼尔:”你傻啊,是赵本山的爷爷“ ...

  10. ICEM棱柱网格生成方向【转载】

    转载自:http://blog.sina.com.cn/s/blog_8add9da60102v2hv.html 利用ICEM生成边界层网格(棱柱网格)时,发现生成的棱柱网格的方向不在流体域一侧,跑到 ...