# windows下C++编译配置hiredis的方法(VS2017)
2018年03月](https://me.csdn.net/weixin_39684284)
https://blog.csdn.net/weixin\_39684284/article/details/79571254
* * [前言](https://blog.csdn.net/weixin_39684284/article/details/79571254#前言)
* [开始](https://blog.csdn.net/weixin_39684284/article/details/79571254#开始)
* [环境说明](https://blog.csdn.net/weixin_39684284/article/details/79571254#环境说明)
* [开始配置](https://blog.csdn.net/weixin_39684284/article/details/79571254#开始配置)
* [Redis编译安装](https://blog.csdn.net/weixin_39684284/article/details/79571254#redis编译安装)
* [hiredis的编译配置](https://blog.csdn.net/weixin_39684284/article/details/79571254#hiredis的编译配置)
* [程序样例](https://blog.csdn.net/weixin_39684284/article/details/79571254#程序样例)
## 前言
最近在学习redis的使用,以及在windows下通过C++连接redis服务器进行操作。在参考了几篇博客,又自己处理许多编译错误的问题,终于将hiredis客户端配置成功了,特此记录,方便查看。
## 开始
### 环境说明
编译器:Visual Studio 2017;
redis客户端:[github上hiredis的windows版](https://github.com/MicrosoftArchive/redis)
版本:直接点击下载[win3.2.100](https://github.com/MicrosoftArchive/redis/archive/win-3.2.100.zip)
> 在这块需要说明的是,我使用的是3.2.100版本的hiredis客户端,对于其他版本的,没有尝试,不过感觉大致思路应该是一致的
### 开始配置
> 这里主要讲述从redis的编译安装到使用hiredis进行C++程序的过程,如果只需要hiredis的配置使用,可略过redis的编译部分
#### Redis编译安装
> 以下是Redis的编译安装,如果感觉麻烦的话,可以直接下载redis的windows安装包进行安装:地址:[Redis-x64-3.2.100.msi](https://github.com/MicrosoftArchive/redis/releases/download/win-3.2.100/Redis-x64-3.2.100.msi)
> 如果上述地址无法下载可以选择这个:[Redis-x64-3.2.100.msi](https://download.csdn.net/download/weixin_39684284/10288873)
* 解压下载下来的`win-3.2.100.zip`,进入到目录`redis-win-3.2.100\msvs\`中,打开`RedisServer.sln`
> 第一次打开的时候VS2017会检测解决方案工具集,提示升级,点击确定即可,将工具集升级到最新或者下载对于的v120工具集
> ![检测工具集](https://img-blog.csdn.net/20180315162304123?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTY4NDI4NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
* 在解决方案资源管理右键解决方案,点击生成。
> 需要注意的是,要注意编译设置是debug还是release,是x86还是x64。使用debug编译在出错的时候好调试一些。我选择的是debug x64的编译配置。此时会出现一系列的警告之类的,不用管,等待完成编译完成就可以了。出现错误就解决。不过3.2.100版本在VS2017下,应该是能够顺利生成的(可能是我运气好?)
* 经过一系列的警告,最终在目录`redis-win-3.2.100\msvs\x64\Debug`里面生成了一些静态库文件和exe文件
> EXE文件 分别是redis-benchmark.exe,redis-check-aof.exe,redis-check-dump.exe,redis-cli.exe,redis-server.exe;把5个EXE复制到自己新建redis的目录下即可,它们的作用如下:
> redis-server:Redis服务器的daemon启动程序
> redis-cli:Redis命令行操作工具。也可以用telnet根据其纯文本协议来操作
> redis-benchmark:Redis性能测试工具,测试Redis在当前系统下的读写性能
> redis-check-aof:数据修复
> redis-check-dump:检查导出工具
> *来源:[https://www.cnblogs.com/raker/p/4368741.html](https://www.cnblogs.com/raker/p/4368741.html)*
* 在命令行界面找到redis的目录,运行redis-server.exe开启服务。redis-cli.exe连接服务。详细命令可以查看[redis命令中心](https://redis.io/topics/rediscli)
#### hiredis的编译配置
* 在Redis的编译安装中,我们编译redis服务的时候,已经编译了hiredis。当然也可以自行重新编译hiredis,只需要右键`hiredis`工程和`Win32_Interop`工程,分别点击生成`hiredis.lib`和`Win32_Interop.lib`即可。
* 在`\redis-win-3.2.100\msvs\x64\Debug`目录中可以看到两个静态链接库文件:`**hiredis.lib`和`Win32_Interop.lib**`, 至此,我们需要的文件和链接库都有了,接下来就是怎么配置使用的问题了。
**
* 新建一个项目,打开【项目属性】对话框,选择【VC++目录】,在【包含目录】中增加我们下载下来的源码的头文件存放的位置,相对路径为:`redis-win-3.2.100\src` 和 `\redis-win-3.2.100\deps\hiredis`。这两个文件夹里包含了hiredis需要使用的头文件和c文件。
* 在【库目录】中选择我们静态链接库存放的位置`\redis-win-3.2.100\msvs\x64\Debug`
> 注意,上面的路径都是相对路径,在操作过程中,需要通过文件选择对话框完成路径的增加,为绝对路径。这些文件路径是可以改变的,只要文件夹里包含的文件没变即可。可以将这些头文件放在一个目录中统一包含也行。
* 在【链接器】>>【输入】中,选择【附加依赖项】,在其中增加之前编译的链接库文件`**hiredis.lib`,`Win32_Interop.lib**`,用回车来分割即可。
* 至此,hiredis的配置就算完成了,可以输入下面的样例运行一下。
> 需要了解的是,一些教程中说到,还需要将`redis-win-3.2.100\src\Win32_Interop`目录下的`win32fixes.c` 放入项目的目录与main.cpp同级,经过测试后发现,其实不放入也不影响使用,如果出现相关问题,可以尝试将该文件放入项目目录中。
#### 程序样例
~~~
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <hiredis.h> //头文件跟随文件存放路径改变
#include <Win32_Interop\win32fixes.h> //头文件跟随文件存放路径改变
#pragma comment(lib,"hiredis.lib")
#pragma comment(lib,"Win32_Interop.lib")
int main() {
redisContext *redis = redisConnect("127.0.0.1", 6379);
if (redis == NULL || redis->err) {
if (redis) {
printf("Error: %s\n", redis->errstr);
// handle error
}
else {
printf("Can't allocate redis context\n");
}
}
else {
printf("connect successed!");
}
redisReply *reply;
/* PING server */
reply = (redisReply *)redisCommand(redis, "PING");
printf("PING: %s\n", reply->str);
freeReplyObject(reply);
reply = (redisReply *)redisCommand(redis, "SET %b %b", "foo", (size_t)3, "ss", (size_t)2);
printf("foo: %s\n", reply->str);
freeReplyObject(reply);
redisFree(redis);
system("pause");
return 0;
}
~~~
```
redisContext *redis = redisConnect("127.0.0.1", 6379);
if (redis == NULL || redis->err) {
if (redis) {
printf("Error: %s\n", redis->errstr);
// handle error
}
else {
printf("Can't allocate redis context\n");
}
}
else {
printf("connect successed!");
}
redisReply *reply;
/* PING server */
reply = (redisReply *)redisCommand(redis, "PING");
printf("PING: %s\n", reply->str);
freeReplyObject(reply);
reply = (redisReply *)redisCommand(redis, "SET %b %b", "foo", (size_t)3, "ss", (size_t)2);
printf("foo: %s\n", reply->str);
freeReplyObject(reply);
redisFree(redis);
system("pause");
```
*如果有什么疑问,可以留言与我沟通~~~~*
* * *
如果遇到与库冲突的问题,可以在右击项目->属性->配置属性->连接器->命令行中输入/NODEFAULTLIB:libcmt.lib
如果遇到 error C4996,各种unsafe报错啊,请右击项目->属性->配置属性->C/C++->预处理器->预处理器定义->添加“\_CRT\_SECURE\_NO\_WARNINGS”(不带引号)
*来源:[https://www.cnblogs.com/raker/p/4368741.html](https://www.cnblogs.com/raker/p/4368741.html)*
- 啥叫DynamicalBilliards动态粒子(动力台球)
- 五大系统-为啥搞那么复杂?
- 内存数据库triangleBilliard19Redis参数190101
- HiRedis在C++Windows下配置编译使用190101
- 三大视图:inputOrigin_计算系统(无理数非视图)_3输出视图190110
- MGDs-Mp系统:数学生成数据(或数据生成)系统-参数修改模块190102
- MGDs的安装攻略190110
- redis+MGDs-Mp系统完整代码之-代码块1-测试Redis连接190110
- c++中longdouble_longlong等能计算的最大、最小值190101
- 充分解耦的MGDs-充分松耦合的数学生成数据系统190111
- MGDs-数据生成系统的(部分)核心代码190114
- mfc190115