最近项目中使用Openssl库时,程序编译没有错误,但是执行时出现OPENSSL_Uplink(100F2010,05): no OPENSSL_Applink错误,在网上找了好多原因,大部分是说DLL库调用方式不正确,应该修改为与Openssl库相同的编译方式也就是/Md方式,但是都不能解决问题,我的代码是从一个pem文件中读取RSA私钥,出错的代码如下:
FILE* fp = fopen (keyFileName, "r");
if ( fp == 0 )
{
perror(keyFileName);
return (-1);
}
m_PrivateKey = PEM_read_PrivateKey(fp, 0, 0, 0);
fclose(fp);
if ( m_PrivateKey == 0 )
{
cerr << "Error reading RSA key in file " <<keyFileName<< endl;
return (-1);
}
最后把上述读取私钥的代码修改为通过BIO方式读取,上述问题不再出现,代码如下:
BIO* in=NULL;
//生成IO对象
in = BIO_new(BIO_s_file());
//将Key文件读入IO
BIO_read_filename(in,keyFileName);
if (in == NULL)
{
perror(keyFileName);
return -1;
}
//将IO中数据以PEM格式读入EVP_PKEY结构中
m_PrivateKey = PEM_read_bio_PrivateKey(in, NULL, NULL, NULL);
if (in != NULL)
BIO_free (in);
if ( m_PrivateKey == NULL )
{
cerr << "读取Key文件失败! " << keyFileName << endl;
return -1;
}