windows下C++編譯配置hiredis的方法(VS2017)

前言

最近在學習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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章