Windows 下PBC库的安装和配置

2023-11-13

背景

PBC库是一个基于双线性对的密码学库,这库在公钥密码学中使用非常广泛。

这个库在Linux下的安装非常的简单,有些只会纸上谈兵的人需要在WIN下做,呵呵。

但是没办法,需求到了,硬着头皮也要写完,对于一些只会谈兵的人,呵呵。

现在主要介绍下参考的一个文章:

最全的一个win下配置pbc文档

PS:本文主要是集合各个博客的优点总结一下。

其实在这文章中,已经把细节交代清楚了,但是我为什么还要写这个博客?原因有以下的几个:

       1.防止自己忘记。

       2.对于PBC库的原理我想好好说明下,对于新手来这还是不容易的。

首先,使用PBC库在Win下编程的思路如下:

      1.将PBC GMP 这两个库的源码借用MINGW来编译成静态的库文件。

      2.编程时,将编译好的lib库文件引入你的工程中即可。

如下的关键问题要解决:

     1.下载获取GMP和PBC的源码

     2.安装MINGW

     3.在Windows下使用MINGW把他们编译成静态库文件

     4.正确配置VS环境

     5.可能遇到的问题以及解决方法

下面详细说下细节,上文链接里边也有,我做个备份并加上自己安装时的一些体会。

1.下载获取GMP和PBC的源码

PBC库:http://crypto.stanford.edu/pbc/ 

自己编译选择PBC library source code。

GMP:https://gmplib.org/

PBC库是依赖GMP库的,所以必须先搞GMP再搞PBC库。

好了,将这两个库解压好,我们进入下一步。

2.安装MinGW:

同样这里引用博客如下:WinGW编译GMP和PBC

MinGW源码位置:https://sourceforge.net/projects/mingw/files/

这个软件非常好安装,我们直接按照正常安装就好,这是在Win下模拟Linux下编译GMP和PBC的平台。

基本上按照如下的几个内容全部安装就好,就是Basic Setup 里边的这几个部分一定要安装好

接着就是使用它来编译我们的GMP和PBC库了,配置WinGW的路径如下:

3.在Windows下使用MINGW把他们编译成静态库文件

进入gmp目录后输入:

./configure CPPFLAGS="-D__USE_MINGW_ANSI_STDIO=0"--enable-static --disable-shared

make

make install

其中,CPPFLAGS="-D__USE_MINGW_ANSI_STDIO=0"在此后编译PBC静态库时才需要,若只编译PBC动态库,则不需要此步,--enable-static --disable-shared可根据编译的是静态库还是动态库作相应的改变。

在这里我们编译GMP静态库,编译成功后,取出libgmp.a和gmp.h两个文件,我是在D盘下新建了两个文件夹,在d:/lib文件夹下放libgmp.a,在d:/include文件夹下放gmp.h。

3.    在http://crypto.stanford.edu/pbc/ 上下载PBC库的源代码,在msys中,输入: 

./configureLDFLAGS="-Ld:/lib -lgmp"CPPFLAGS="-Id:/include" --enable-static --disable-shared

make 

make install

这里我们编译的是静态库,得到libpbc.a(若需要编译动态库,可将./configure那步后面改为--disable-static --enable-shared,则可得到libpbc-1.dll)

4. 得到libpbc.a(在编译源码目录下)、libgmp.a(在编译源码目录下)、libgcc.a(在MinGW安装文件夹下)、libmingwex.a (在MinGW安装文件夹下)四个文件。

5.这里得到的这四个文件就是我们需要的了。

4.正确配置VS环境

这里有一个不错的配置方法一:VS配置方法一

方法一是一种比较正常的配置方法,如下所示:

现在将配置的过程以图的形式展示一遍。

打开VS2010,鼠标放在你自己的项目上,右击,选择>属性,之后就出来上面的截图页面了,我已经标好了顺序,在红色标号4 这里注意,附加包含目录就是把PBC文件的include目录下所有的.h文件附加进去,还要再把gmp.h文件附加进去,其中gmp.h我已经放在了网盘的include.rar文件中,可以直接解压之后把整个include目录附加。接下来在上面的页面中配置链接器:

 

 

同理注意第3步,这一步把用MinGW编译生成的libpbc.a、libgmp.a、libgcc.a、libmingwex.a文件附加,这四个.a文件我已经放到网盘中了,可以自行下载之后按照步骤附加。

最后是命令行参数配置:

命令行参数配置是为了运行时,使程序找到自己运行时需要的参数,这里我选择了PBC\param下面的a.param参数来作为运行参数,此处就直接填写了a.param,大家可以用根据自己的需要自行选择此文件夹下的参数。这个a.param要事先放到自己的项目下面,为了防止运行时找不到参数,我将这个a.param在项目文件夹和项目的Debug文件夹下都放了一个。

这些都选择好之后。点击“应用”、“确定”。我们就可以进行VS2010中的PBC库开发了。

在用VS2010运行程序时,先生成解决方案,然后在选择开始调试不执行,这样是为了避免VS中运行控制台程序时出现控制台一闪而过的情况。

这里有一个不错的配置方法二:VS配置方法二

拷贝到VS2010工程下,并使用#pragma comment(lib,"xxx.lib")加载,当然也可设置工程属性加载。在包含头文件后(pbc相关、gmp.h)编译链接工程。

5.可能遇到的问题以及解决方法

1.关于安全类型检查的错误,VS 2010 后都有一种参数类型的强制检查,我们关闭它,如下所示:

包括警告等级,SDL检查,警告视为错误都进行修改即可。

3.如下错误

  • configure: error: No usable M4 in $PATH or /usr5bin

解决方法:在mingw中下载m4包

  • flex not found

解决方法:下载flex-2.54.1.exe安装,下载链接 然后在安装目录中找到flex.exe,将flex.exe拷贝到C:\MinGW\msys\1.0\bin文件夹中。

  • studio 调试时提示attribute错误(其中这个错误我遇到了,其他的没有遇到,我说说这个)
  • 解决方法:解决方法  这个原因主要是GCC下的一些写法和WIN下的写法不同导致的,所以只需要替换两个文件的部分内容即可,具体内容如下: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

第二个文件 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);
  • visual studio 调试时提示:

  • “”Win32Project3.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。
    
    “Win32Project3.exe”(Win32): 已加载“C:\Windows\SysWOW64\kernel32.dll”。已加载符号。
    
    “Win32Project3.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。
    
    “Win32Project3.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcr120d.dll”。已加载符号。
    
    程序“[4308] Win32Project3.exe”已退出,返回值为 0 (0x0)。

     

  •  

     

    解决方法:解决方法

  • 无法解析_snprintf   解决方法:在提示的文件(GMP和PBC库的源码文件)里找到snprintf,并在其前面加下划线变成_snprintf,然后重新编译GMP和PBC库,将得到新的libpbc.a、libgmp.a拷贝到VS工程下,再次编译链接运行。或者将文件夹中的libmingwex.a也加载入工程,即可解决问题。.若报错"无法解析_snprintf",应该在提示的文件(GMP和PBC库的源码文件)里找到snprintf,并在其前面加下划线变成_snprintf,然后重新编译GMP和PBC库,将得到新的libpbc.a、libgmp.a拷贝到VS工程下,再次编译链接运行。或者将文件夹中的libmingwex.a也加载入工程,即可解决问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 下PBC库的安装和配置 的相关文章

  • Windows 上的递归移动命令

    我需要做一个 sh 的 bat 副本 我不太了解 Windows cmd 在 Linux 上我可以做 mv or rsync a SOURCE DEST remove sent files ignore existing whole fil
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • Windows 窗体中的标准 Windows 菜单栏

    我注意到添加了一个MenuStrip 来自工具箱 我的表单设计不会产生像许多本机 Windows 应用程序中那样的菜单栏 相反 我得到了一个像 Visual Studio 自己的菜单栏 没有任何样式设置MenuStrip似乎模仿了更常见的本
  • Visual C++ 找不到“Windows 类型”,如 PVOID、DWORD、ULONG 等

    Windows 似乎无法找到任何这些类型 我完全不知道该怎么办 我在 MSDN 上找到的东西似乎表明它们是默认包含的 但它们在 Native 程序或 CLR 程序中不起作用 我收到的具体错误是
  • 如何捕获未发送到 stdout 的命令行文本?

    我在项目中使用 LAME 命令行 mp3 编码器 我希望能够看到某人正在使用什么版本 如果我只执行 LAME exe 而不带参数 我会得到 例如 C LAME gt LAME exe LAME 32 bits version 3 98 2
  • 代码 GetAsyncKeyState(VK_SHIFT) & 0x8000 中的这些数字是什么?它们是必不可少的吗?

    我试图在按下按键的简单动作中找到这些数字及其含义的任何逻辑解释 GetAsyncKeyState VK SHIFT 0x8000 可以使用哪些其他值来代替0x8000它们与按键有什么关系 GetAsyncKeyState 根据文档返回 如果
  • 用于推送通知的设备令牌

    我正在实施推送通知服务 我需要创建一个数据库来存储 4 个移动平台的所有设备令牌 我想根据他们的平台 iOS Android BlackBerry WP7 来组织它们 但是有什么方法可以区分平台 这样如果我只想向 Android 用户发送消
  • 如何以管理员身份在 rake 任务中运行 shell 命令?

    我有一个简短的 cmd 文件 我想将其作为部署过程的一部分运行 不幸的是 cmd 文件需要管理员权限 是否可以从 rake 中获得管理员权限 或者我是否需要以管理员身份启动 shell 您可以尝试runas http ss64 com nt
  • 在 64 位 Windows 上运行 32 位可执行文件时出现问题

    如果允许的话 我会添加 500 个我自己的代表作为赏金 我在用着wkhtml转pdf http wkhtmltopdf org 将 HTML 网页转换为 PDF 这在我的 32 位开发服务器上完美运行 不幸的是 我无法运送我的机器 p 但是
  • 批处理脚本 - IF EXIST 复制到 %localappdata% 错误

    我似乎被批处理脚本困住了 需要一些帮助 基本上我需要检查文件是否存在于文件夹中 localappdata 如果确实如此 则覆盖该文件 如果没有放置在不同的位置 那么目前它的内容如下 IF EXIST localappdata foldern
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • Notepad++ - 使函数“可点击”?

    我只是想这可能有用 但我找不到办法 在 Notepad 中 有没有一种方法可以使函数名称 可单击 即使它们成为链接 这样如果您单击它们 它会自动将您带到其定义 最好是跨整个代码库 目前还没有插件提供可直接单击的函数名称 但您可以尝试使用 S
  • “以管理员身份运行”时的 Windows 批处理文件起始目录

    我有一个位于目录中的批处理文件 也必须从那里运行 因为它会更新该目录中的文件 这工作得很好 除非用户以管理员身份运行批处理文件 Vista 上需要 那么起始目录是C Windows System32 有什么办法仍然能够知道批处理文件是从哪个
  • 使用 Objective-C 进行 Windows 开发

    最近读了一篇关于 Objective C 的文章 我觉得它是一门相当简洁的语言 具有很多很酷的功能 我无意进行任何 iPhone 开发 但是我了解 GCC 能够编译 Objective C 代码 所以我想知道 Objective C 是 W
  • 在 Python 中静默打印 PDF

    我正在尝试使用 Python 打印 PDF 而不打开 PDF 查看器应用程序 Adobe Foxit 等 我还需要知道打印何时完成 以删除文件 Here http permalink gmane org gmane comp python
  • 适用于 Python 的 GitLab CI 共享 Windows 运行器

    我在 GitLab 中有一个 python 项目仓库 我看到 GitLab 共享了可用的测试版 Windows 运行程序 请参阅this https about gitlab com blog 2020 01 21 windows shar
  • 如何使用 MSYS2 获取旧版本的软件包?

    我决定尝试 CLion for Windows 它推荐使用 MinGW 或 Cygwin 进行编译 我安装了MSYS2 http sourceforge net p msys2 wiki MSYS2 20installation 包管理器进
  • WndProc调用机制(WinAPI)

    我试图了解 Windows 应用程序是如何工作的 有一个WndProc函数 其中发生消息处理 LRESULT CALLBACK WndProc HWND hwnd UINT msg WPARAM wParam LPARAM lParam s
  • 如何在 Windows 中创建上下文菜单子菜单?

    我一直在编写实用程序并通过 Shell 键 上的 Regedit 将它们映射到上下文菜单 但我不知道如何像一些更流行的实用程序那样创建子菜单 例如 如果我有三个脚本将文件移动和重命名到三个不同的文件夹 那么现在我有三个不同的上下文菜单条目
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他

随机推荐

  • 表格嵌套表格css_HTML5和CSS3的登录和注册表格

    表格嵌套表格css View demo 查看演示 Download Source 下载源 In this tutorial we are going to create two HTML5 forms that will switch be
  • 快速理解Faster RCNN

    Faster RCNN 1 网络结构 2 锚框生成 3 RPN结构 4 Roi pooling 5 分类和回归任务 6 损失函数 7 训练流程 1 网络结构 首先输入图像 进行尺度裁剪成固定的M N 如果比例不匹配可以先填充再裁剪 back
  • 云计算入门——IT架构九重天

    文章目录 一 概述 二 各层简述 2 1 基础层 2 2 计算机网络 2 3 存储层 2 4 服务器层 2 5 操作系统层 2 6 数据库层 2 7 中间件 运行库 2 8 应用软件 2 9 数据层 一 概述 一个公司搭建IT应用一般都会涉
  • [ElasticSearch]间隔搜索IntervalsQuery及JavaSDK简单调用

    1 概念 intervals query 允许用户精确控制查询词在文档中出现的先后关系 实现了对terms顺序 terms之间的距离以及它们之间的包含关系的灵活控制 通过intervals query 间隔搜索 我们可以完成各个terms在
  • MYSQL导出数据出现The MySQL server is running with the --secure-file-priv option

    今天尝试使用 into outfile导出数据的时候出现错误 The MySQL server is running with the secure file priv option so it cannot execute this st
  • 服务器r730系统备份软件,r730服务器

    r730服务器 内容精选 换一换 创建外表语法 CREATE FOREIGN TABLE SQL on Hadoop or OBS 中 需指定一个与MRS数据源连接相关联的外部服务器 当您通过GaussDB DWS 管理控制台创建MRS数据
  • 区块链为每一笔交易盖上时间戳

    黄老邪在传授记账方法时 要求居民将发生在桃花岛上的每一笔交易都记录下来 并且要求他们将交易发生的时间也一并记录在账本上 这就相当于区块链为每一笔交易在发生时盖上了时间戳 在区块链中 时间戳的应用是对每一次交易记录的认证 它就像交易合同公证一
  • 判断map集合是否为空和是否为null

  • 稀疏矩阵转置(C语言)

    最近有数据结构实验课了 还得学一学数据结构喽 以后就把学习经过贴上来了 稀疏矩阵 当一个数组中大部分元素为 或者为同一个值的数组时 可以使用稀疏数组来保存该数组 稀疏数组的处理方法 1 记录数组一共有几行几列 有多少个不同的值 假设有sum
  • linux 切换不了csh,BASH & CSH linux  重定向(ZZ)

    bash 应该允许输入来自以下两种方式 在命令行上指定的文件名 例如 command input file 在这个例子中 command 应该读取文件 input file 标准输入 stdin 缺省情况下为终端 也就是用户的键盘 例如 c
  • TX2支持reboot办法

    手头有台TX2 想要远程控制reboot 在nvidia账号下直接敲命令 nvidia tegra ubuntu sudo reboot h sudo password for nvidia nvidia is not in the sud
  • 驱动开发 作业 day7 9/18

    基于GPIO子系统实现led灯点亮 head h ifndef HEAD H define HEAD H 构建LED开关的功能码 不添加ioctl第三个参数 define LED ON IO l 1 define LED OFF IO l
  • 动态规划之二维费用的背包模型

    前置知识 01背包问题 动态规划之01背包模型 如何何何的博客 CSDN博客 完全背包问题 动态规划之完全背包模型 如何何何的博客 CSDN博客 多重背包问题 动态规划之多重背包模型 如何何何的博客 CSDN博客 二维费用背包问题 二维费用
  • selenium页面切换操作

    selenuim页面切换 webdriver只能在一个页面里对元素进行识别和定位 如果有多个页面操作的时候 要先进行页面切换 切换分两种 1 iframe内嵌页面切换 框架集切换 1 获取iframe标签 iframe driver fin
  • Android12窗口模糊(一)在Activity和Dialog中实现高斯模糊效果

    前言 在 Android 12 中 提供了一些用于实现窗口模糊处理效果 例如背景模糊处理和模糊处理后方屏幕 的公共 API 窗口模糊处理或跨窗口模糊处理用于模糊处理给定窗口后方的屏幕 有两种窗口模糊处理方式 可用于实现不同的视觉效果 背景模
  • 华为OD机试备考攻略 以及题库目录分值说明 考点说明

    华为题库说明 2022与2023题库的区别 华为OD机试的题库是季度更新的 Q1 Q2 Q3 Q4 笔者专栏的题库分为2023和2022 2023的题库是包括2022 11 Q4第四季度 之后以及2023年的题库 2022的题库是包括202
  • 第九届蓝桥杯C/C++ 大学B组省赛编程题题目及答案解析

    目录 试题F 递增三元组 试题G 螺旋折线 试题H 日志统计 试题I 全球变暖 试题J 乘积最大 试题F 递增三元组 问题描述 输入格式 输出格式 样例输入 样例输出 27 代码解析 暴力 三重循环计算所有满足ai lt bj lt ck的
  • R语言之方差分析篇

    当包含的因子是解释变量时 通常会从预测转向 级别差异的分析 即称作方差分析 ANOVA 组间因子 因变量 自变量 均衡设计 balanced design 组内因子 单因素组间方差分析 单因素组内方差分析 重复测量方差分析 主效应 交叉效应
  • JVM Mutex Monitor::lock

    void Monitor lock Thread Self ifdef CHECK UNHANDLED OOPS Clear unhandled oops so we get a crash right away Only clear fo
  • Windows 下PBC库的安装和配置

    背景 PBC库是一个基于双线性对的密码学库 这库在公钥密码学中使用非常广泛 这个库在Linux下的安装非常的简单 有些只会纸上谈兵的人需要在WIN下做 呵呵 但是没办法 需求到了 硬着头皮也要写完 对于一些只会谈兵的人 呵呵 现在主要介绍下