hiredis windows靜態庫編譯

 

Hiredis是Redis官方推出的一個用於鏈接redis數據庫的極簡C庫git

GitHub地址:https://github.com/redis/hiredis ,測試用的 版本是v1.0.0github

redis和hiredis,官方並無提供windows版本,在GitHub的說明中也沒有windows平臺下使用的相關的介紹redis

 

編譯過程

1> githib下載v1.0.0版本 地址:https://github.com/redis/hiredis/tree/v1.0.0數據庫

2>vs建立靜態庫工程,添加hiredis目錄下*.c *.h文件到vs工程,編譯工程windows

 

問題列表

1.編譯問題,sds.h文件編譯報錯,在預編譯定義中添加inline=_inline 安全

 

 2.openssl庫依賴,hiredis支持創建ssl協議的安全鏈接,須要OpenSSL依賴庫,在此也能夠跳過此功能,在vs工程中移除ssl.c,不編譯便可函數

 

 3.hiredis.c文件中"%zu" 修改成 "%lu",vs 不支持%zu size_t 格式化輸出測試

 

4.hiredis.c文件中ui

cmd = hi_malloc(totlen+1); 申請的內存塊會被下面的for循環寫越界,致使內存溢出,在函數外層,釋放cmd內存的時候崩潰掉,
修改方案爲"
cmd = hi_malloc(totlen+1+argc*3);"
 1 /* Build the command at protocol level */
 2     cmd = hi_malloc(totlen+1);
 3     if (cmd == NULL)
 4         return -1;
 5 
 6     pos = sprintf(cmd,"*%d\r\n",argc);
 7     for (j = 0; j < argc; j++) {
 8         len = argvlen ? argvlen[j] : strlen(argv[j]);
 9         pos += sprintf(cmd+pos,"$%zu\r\n",len);
10         memcpy(cmd+pos,argv[j],len);
11         pos += len;
12         cmd[pos++] = '\r';
13         cmd[pos++] = '\n';
14     }
15     assert(pos == totlen);
16     cmd[pos] = '\0';
相關文章
相關標籤/搜索