windows下C++编译配置hiredis的方法(VS2017)

2021年4月7日 10点热度 0条评论 来源: ermaotech

前言

最近在学习redis的使用,以及在windows下通过C++连接redis服务器进行操作。在参考了几篇博客,又自己处理许多编译错误的问题,终于将hiredis客户端配置成功了,特此记录,方便查看。

开始

环境说明

编译器:Visual Studio 2017;
redis客户端:github上hiredis的windows版
版本:直接点击下载win3.2.100

在这块需要说明的是,我使用的是3.2.100版本的hiredis客户端,对于其他版本的,没有尝试,不过感觉大致思路应该是一致的

开始配置

这里主要讲述从redis的编译安装到使用hiredis进行C++程序的过程,如果只需要hiredis的配置使用,可略过redis的编译部分

Redis编译安装

以下是Redis的编译安装,如果感觉麻烦的话,可以直接下载redis的windows安装包进行安装:地址:Redis-x64-3.2.100.msi
如果上述地址无法下载可以选择这个:Redis-x64-3.2.100.msi

  • 解压下载下来的win-3.2.100.zip,进入到目录redis-win-3.2.100\msvs\中,打开RedisServer.sln

    第一次打开的时候VS2017会检测解决方案工具集,提示升级,点击确定即可,将工具集升级到最新或者下载对于的v120工具集

  • 在解决方案资源管理右键解决方案,点击生成。

    需要注意的是,要注意编译设置是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

  • 在命令行界面找到redis的目录,运行redis-server.exe开启服务。redis-cli.exe连接服务。详细命令可以查看redis命令中心

hiredis的编译配置

  • 在Redis的编译安装中,我们编译redis服务的时候,已经编译了hiredis。当然也可以自行重新编译hiredis,只需要右键hiredis工程和Win32_Interop工程,分别点击生成hiredis.libWin32_Interop.lib即可。

  • \redis-win-3.2.100\msvs\x64\Debug目录中可以看到两个静态链接库文件:hiredis.libWin32_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.libWin32_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;
}

如果有什么疑问,可以留言与我沟通~~~~

如果遇到与库冲突的问题,可以在右击项目->属性->配置属性->连接器->命令行中输入/NODEFAULTLIB:libcmt.lib

如果遇到 error C4996,各种unsafe报错啊,请右击项目->属性->配置属性->C/C++->预处理器->预处理器定义->添加“_CRT_SECURE_NO_WARNINGS”(不带引号)
来源:https://www.cnblogs.com/raker/p/4368741.html

    原文作者:ermaotech
    原文地址: https://blog.csdn.net/weixin_39684284/article/details/79571254
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。