Windows下PBC库的安装和vs2019中的测试

搜索了很多win下面配置PBC Library的经验贴后,终于配置成功了,接下来把自己遇到的一些问题记录一下。

先给出主要参考的文章的连接:

(6条消息) Windows 下PBC库的安装和配置_zmrlinux的博客-CSDN博客_pbc库安装 

(7条消息) VS2015配置PBC库_YorkSuen的博客-CSDN博客

附上需要用到文件的整合:http://pan.baidu.com/s/1hsMFT44 密码:j5fl 

配置的过程: 

1.创建一个vs2019的c++项目

 2.配置附加包含目录。将上述连接的文件解压好,该文件已经将gmp.h和include目录中的.c文件整合好放在include文件夹下面了,可以直接使用。(方便include,我的头文件是在项目文件夹下的include目录中,gmp.h也要放进去。)

 

 

 3.配置pbc.lib的目录

 

 4.添加pbc.lib

 

 

 5.配置测试参数

 

同时最好把a.param参数对应的文件拷贝到该方案的文件下。为了防止运行时找不到参数,最好将这个a.param在项目文件夹和项目的Debug文件夹下都放一个。

6.更改include文件中的参数

提示:上面给出的文件中的两个文件已经是更改好的,无需再次更改

 先给上连接:c++ - Running PBC in Windows - Visual Studio - Stack Overflow

1)需要把pbc_utils.h文件中的对应代码更改一下

FROM

/*@manual log
Reports error message and exits with code 128.
*/
void pbc_die(const char *err, ...)
    __attribute__((__noreturn__))
    __attribute__((format (printf, 1, 2)));

/*@manual log
Reports informational message.
*/
void pbc_info(const char *err, ...)
    __attribute__((format (printf, 1, 2)));

/*@manual log
Reports warning message.
*/
void pbc_warn(const char *err, ...)
    __attribute__((format (printf, 1, 2)));

/*@manual log
Reports error message.
*/
void pbc_error(const char *err, ...)
    __attribute__((format (printf, 1, 2)));

TO

/*@manual log
Reports error message and exits with code 128.
*/
#ifdef _MSC_VER

__declspec(noreturn) void pbc_die(const char *err, ...);

#else

void pbc_die(const char *err, ...)
__attribute__((__noreturn__))
__attribute__((format(printf, 1, 2)));

#endif

/*@manual log
Reports informational message.
*/
#ifdef _MSC_VER

void pbc_info(const char *err, ...);

#else

void pbc_info(const char *err, ...)
__attribute__((format(printf, 1, 2)));

#endif

/*@manual log
Reports warning message.
*/
#ifdef _MSC_VER

void pbc_warn(const char *err, ...);

#else

void pbc_warn(const char *err, ...)
__attribute__((format(printf, 1, 2)));

#endif

/*@manual log
Reports error message.
*/
#ifdef _MSC_VER

void pbc_error(const char *err, ...);

#else

void pbc_error(const char *err, ...)
__attribute__((format(printf, 1, 2)));

#endif

(the reason is that the __attribute__ is GCC-specific, thus inexistent in VS.)

2)需要把 pbc_curve.h文件中的对应代码更改一下

FROM

#pragma GCC visibility push(hidden)
// Internal:

element_ptr curve_x_coord(element_t e);
element_ptr curve_y_coord(element_t e);
element_ptr curve_a_coeff(element_t e);
element_ptr curve_b_coeff(element_t e);
element_ptr curve_field_a_coeff(field_t f);
element_ptr curve_field_b_coeff(field_t f);

void curve_from_x(element_ptr e, element_t x);
void curve_set_si(element_t R, long int x, long int y);
void curve_set_gen_no_cofac(element_ptr a);

#pragma GCC visibility pop

TO

// Internal:

element_ptr curve_x_coord(element_t e);
element_ptr curve_y_coord(element_t e);
element_ptr curve_a_coeff(element_t e);
element_ptr curve_b_coeff(element_t e);
element_ptr curve_field_a_coeff(field_t f);
element_ptr curve_field_b_coeff(field_t f);

void curve_from_x(element_ptr e, element_t x);
void curve_set_si(element_t R, long int x, long int y);
void curve_set_gen_no_cofac(element_ptr a);

(the reason is that the #pragma GCC directive DOES NOT exist in VS.)

7.可能会出现的错误和解决办法

会出现fopen报错。

解决方法,添加_CRT_SECURE_NO_WARNINGS:

 

会出现无法打开stdafx.h文件。

解决方法,将“include “stdafx.h”头文件注释掉

 

会出现无法启动此程序,计算机中丢失pbc.dll

解决办法,选择当前工程,右击"属性" -> "配置属性" -> "调试",在"工作目录"设置dll的路径,将pbc.dll文件所在的目录添加进去。

 

 还可能出现如下错误

 解决方案,将element_from_hash(H, "Message", 7);和element_from_hash(H, "Message", 7);两行代码注释掉。具体原因不是很清楚,希望有dalao指点一下。

 

 编译结果:

 

 

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值