我正在使用Shining Light Productions!使用openssl!我正确配置了项目,并且可以编译我的代码。当我添加另一行代码时:
H_get0_pqg(dh1,&p,&q,&g);
它没有被执行并显示一些错误:
1> ------开始构建:项目:dh,配置:Win32发行版------ 1>创建库F:\ Using_OpenSSL \ Release \ dh.lib和对象F:\ Using_OpenSSL \ Release \ dh.exp 1> dh.obj:错误LNK2001:未解析的外部符号_H_get0_pqg 1> F:\ Using_OpenSSL \ Release \ dh.exe:致命错误LNK1120:1个未解析的外部组件 ===========构建:0成功,1失败,0最新,跳过0 ==========
我尝试了一些方法,例如添加新的lib文件,但是都失败了。
错误LNK2001:无法解析的外部符号_H_get0_pqg
我程序中的所有代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<openssl\dh.h>
#include<openssl\applink.c>
int main()
{
DH *dh1, *dh2;
dh1 = DH_new();
dh2 = DH_new();
int ret;
ret = DH_generate_parameters_ex(dh1, 128, DH_GENERATOR_2, NULL);
printf("generating DH param success!...\n");
DHparams_print_fp(stdout, dh1);
if (ret != 1)
{
printf("generating DH param failed!\n");
goto lab1;
}
int err_code;
ret = DH_check(dh1, &err_code);
if (ret != 1)
{
if (err_code & DH_CHECK_P_NOT_PRIME)
printf("p is not prime!\n");
if (err_code & DH_CHECK_P_NOT_SAFE_PRIME)
printf("p is not safe prime!\n");
if (err_code & DH_UNABLE_TO_CHECK_GENERATOR)
printf("is not checking generator's value!\n");
if (err_code & DH_NOT_SUITABLE_GENERATOR)
printf("is not generator!\n");
goto lab1;
}
printf("DH param checking...\n");
int param_len;
param_len = DH_size(dh1);
printf("DH param size(byte) %d\n", param_len);
printf("DH param size(bit) %d\n", DH_bits(dh1));
ret = DH_generate_key(dh1);
if (ret != 1)
{
printf("DH_generate_key error!\n");
goto lab1;
}
DHparams_print_fp(stdout, dh1);
BIGNUM *p = BN_new();
BIGNUM *q = BN_new();
BIGNUM *g = BN_new();
H_get0_pqg(dh1,&p,&q,&g);
DHparams_print_fp(stdout, dh2);
BN_free(p);
BN_free(q);
BN_free(g);
lab1:
DH_free(dh1);
DH_free(dh2);
return 0;
}