2013-07-24 102 views
0
#include <algorithm> 
#include <stdio.h> 
#include <openssl/sha.h> 

using namespace std; 

int main() 
{ 
    unsigned char ibuf[] = "compute sha1"; 
    unsigned char obuf[20]; 

    SHA1(ibuf, strlen(ibuf), obuf); 

    int i; 
    for (i = 0; i < 20; i++) { 
     printf("%02x ", obuf[i]); 
    } 
    printf("\n"); 
} 


g++ file.cpp -o file -l libssl 


file.cpp: In function ‘int main()’: 
file.cpp:29:27: error: invalid conversion from ‘unsigned char*’ to ‘const char*’ [-fpermissive] 
/usr/include/string.h:399:15: error: initializing argument 1 of ‘size_t strlen(const char*)’ [-fpermissive] 

好奇什麼是錯..我試圖計算SHA1Openssl的SHA1編譯問題

+0

我沒有嘗試你的代碼,怎麼樣刪除IBUF的聲明 – Gisway

回答

1

首先,我不知道是否有在匿名輸了,但在我看來,有遺漏

include <string.h> 

和命令行應該看起來更像:

g++ file.cpp -o file -lssl 

您正在使用C++編譯器。 C++編譯器通常對類型非常嚴格。您已將ibuf定義爲unsigned char(並且在strlen中使用它被視爲unsigned char *)並且strlen預計爲const char*,因此它會產生錯誤。

,可以有以下選擇:

  1. 你可以在strlenibuf

    SHA1(ibuf, strlen((const char *)ibuf), obuf); 
    
  2. 您可以使用建議-fpermissive標誌,使g++更多的寬容和轉換錯誤僅僅是警告,雖然我不會推薦它:

    g++ -fpermissive file.cpp -o file -lssl 
    
  3. 由於代碼看起來像一個普通的C,也許你不需要C++編譯器。如果是這樣的話,只需要使用C語言編譯器,而不是C++

    gcc file.cpp -o file -lssl 
    

    你會那麼需要刪除include <algorithm>namespace..

+0

錯誤簽名:初始化失敗,以確定「IBUF」 – user1777711

+0

的大小@ user1777711與選項(1,2,或3)? –