2013-07-24 75 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)? –