💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 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)*