win10 下使用 MINGW 编译 PBC 库

最近在写自己的小论文,需要评估签名算法的性能,论文中使用的签名算法是基于身份加密(IBE)体制,牵扯到双线性对的运算,因此要在电脑上安装PBC(Pairing-Based Cryptography)库。自己用了一天时间才编译配置好环境,下面是我的一些总结,希望对其他人有一定帮助。

安装环境

Windows 10 64bit,Visual Studio 2012

安装说明

PBC库是基于linux环境下编写的,但自0.5.10版本开始,便可以在windows环境下编译。要编译PBC库,首先必须安装MinGW,利用其中的Msys软件模拟linux下的编译。由于PBC库需依赖GMP库,所以必须在Msys环境下先编译GMP库。

相关软件下载链接

PBC库:http://crypto.stanford.edu/pbc/ 如果自己手动编译和安装选择PBC library source code,想省事点可以选择Microsoft Visual C++ conversion。我选择的是PBC library source code。

MinGW:https://sourceforge.net/projects/mingw/files/

GMP:https://gmplib.org/

安装步骤

  1. 安装MinGW编译程序。下载安装管理器mingw-get-setup.exe,和普通软件安装步骤一样,默认安装目录是C:\MinGW。在MinGW Installation Manager中进行应用安装,安装结果如图:

mingw

安装后配置环境变量,将C:\MinGW\bin写入系统变量path中,如图:

系统变量

  1. 安装GMP。进入C:\MinGW\msys\1.0,双击打开msys.bat,模拟Linux环境。然后输入gcc -v测试gcc是否安装成功,如下图。保留此窗口,后面都要在此窗口输入命令。

msys

将下载好的GMP解压,我的GMP解压到D盘,在命令行中输入 cd /d/gmp-6.1.2,进入gmp目录后输入:

1
2
3
./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

  1. 安装PBC。与GMP类似,解压,进入安装目录。输入:
1
2
3
./configure LDFLAGS="-Ld:/lib -lgmp" CPPFLAGS="-Id:/include" --enable-static --disable-shared
make
make install

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

VS2012中配置PBC

打开VS2012,新建一个空的VS C++工程,将“所需源文件”文件夹中的include文件、libpbc.a、libgcc.a、libgmp.a、libmingwex.a拷贝到工程源代码文件夹下面,并在cpp文件中加入头文件名:

1
2
3
4
#pragma comment(lib, "libmingwex.a")
#pragma comment(lib, "libgcc.a")
#pragma comment(lib, "libgmp.a")
#pragma comment(lib, "libpbc.a")

工程目录文件如下图:

详细步骤参考 在VS2010配置并运行PBC库程序

可能遇到的错误

  • 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文件夹中。

  • visual studio 调试时提示:

    1
    2
    3
    4
    5
    “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)。

    解决方法:参考链接

    • studio 调试时提示attribute错误

    解决方法:参考链接

    • 无法解析_snprintf

    在提示的文件(GMP和PBC库的源码文件)里找到snprintf,并在其前面加下划线变成_snprintf,然后重新编译GMP和PBC库,将得到新的libpbc.a、libgmp.a拷贝到VS工程下,再次编译链接运行。或者将文件夹中的libmingwex.a也加载入工程,即可解决问题。

参考链接

Windows下编译PBC库

Windows下使用MinGW编译生成的PBC库

在VS2010配置并运行PBC库程序

Running PBC in Windows - Visual Studio

赞赏是对作者最大的支持!
0%