zoukankan      html  css  js  c++  java
  • 安装m2crypto报错swig error : Unrecognized option -builtin

    M2Crypto 是最完整的为 Python 包装 OpenSSL 的 RSA,DSA,DH,EC,HMACs,消息摘要,对称密码算法(包括AES)的一个库工具。
    而自从 M2Crypto 升级到版本 0.22.5 后,用 pip install M2Crypto 命令来安装 M2Crypto 时总是会失败。
    在没有升级到此版本之前,使用 pip 安装则是没有问题的。下面来找找原因。
    系统环境:CentOS 6.7 x86
    失败关键字:swig

    失败现象:

    swigging SWIG/_m2crypto.i to SWIG/_m2crypto_wrap.c
    swig -python -I/usr/include/python2.6 -I/usr/include -includeall -modern -builtin -outdir build/lib.linux-i686-2.6/M2Crypto -D__i386__ -o SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i
    swig error : Unrecognized option -builtin
    Use 'swig -help' for available options.
    error: command 'swig' failed with exit status 1

    这里有个最为明显的错误提示:
    swig error : Unrecognized option -builtin

    这说明,系统里安装的 swig 是没有 -builtin 这个选项的。来看看系统装的 swig 版本。
    rpm -qa | grep swig
    返回:
    swig-1.3.40-6.el6.i686
    是不是版本比较旧的缘故导致的呢?再来看看 swig 的帮助。
    swig -help
    看到其中有:
    Note: ‘swig -<lang> -help’ displays options for a specific target language.
    因为是涉及到 Python,换个命令来看看。
    swig -python -help
    返回(节选):
    -buildnone      – Use Py_BuildValue() to obtain Py_None (default in Windows)
    注意其中的 options,果然是没有 -builtin 这个选项的。

    好吧很明显,安装 M2Crypto 所依赖的 swig 版本升级了,而 CentOS 默认的 swig 版本过低了。
    下面来升级 swig 版本。官网最新版已经到了 3.0.7 了,就编译安装此版本的。

    wget -O swig-3.0.7.tar.gz http://prdownloads.sourceforge.net/swig/swig-3.0.7.tar.gz
    tar zxf swig-3.0.7.tar.gz
    cd swig-3.0.7
    ./configure --prefix=/usr
    make && make install

    安装完成后,再来看一下版本号。
    swig -version
    返回:
    SWIG Version 3.0.7

    至此,升级 swig 完成。再来看看新版本的 swig 到底有没有 -builtin 这个选项。
    swig -python -help
    返回(节选):
    -buildnone      – Use Py_BuildValue() to obtain Py_None (default in Windows)
    -builtin        – Create new python built-in types, rather than proxy classes, for better performance

    果然如此。既然如此,那赶紧继续用 pip 安装 M2Crypto 吧。
    pip install M2Crypto

    Boom,又出错了。错误信息如下:

    swigging SWIG/_m2crypto.i to SWIG/_m2crypto_wrap.c
    swig -python -I/usr/include/python2.6 -I/usr/include -includeall -modern -builtin -outdir build/lib.linux-i686-2.6/M2Crypto -D__i386__ -o SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i
    /usr/include/openssl/opensslconf.h:13: Error: Unable to find 'opensslconf-i386.h'
    error: command 'swig' failed with exit status 1

    原因是什么呢?M2Crypto 没找到 openssl 的头文件 opensslconf-i386.h
    如果是在 x86_64 下安装的话,会找不到 opensslconf-x86_64.h

    怎么办呢?看来是不能通过 pip 来安装了,那我们手动来。

    wget --no-check-certificate -O M2Crypto-0.22.5.tar.gz https://pypi.python.org/packages/source/M/M2Crypto/M2Crypto-0.22.5.tar.gz
    tar zxf M2Crypto-0.22.5.tar.gz
    cd M2Crypto-0.22.5
    cp /usr/include/openssl/opensslconf-i386.h ./  #手动把头文件复制过来(适用于x86)
    cp /usr/include/openssl/opensslconf-x86_64.h ./  #手动把头文件复制过来(适用于x86_64)
    python setup.py install

    好了,这下终于安装完成了。看看成果:
    pip list | grep M2Crypto
    返回:
    M2Crypto (0.22.5)

    后来我去到 M2Crypto 的官网去看了下,已经有人跟作者反映了这个事情。
    https://gitlab.com/m2crypto/m2crypto/issues/69
    希望作者能在下个版本改进吧。

  • 相关阅读:
    DataTable进行排序Asc升序,Desc降序
    Money型字段小数点后保留两位小数
    删除RHSA文件方法
    PowerDesigner 同名问题解决 Entity Attribute name uniqueness
    Repeater嵌套绑定Repeater以及内层调用外层数据
    让A超链接无效的办法 阻止元素发生默认的行为
    图的遍历
    Modular Production Line
    网络流24题-最长k可重区间集问题
    运输计划
  • 原文地址:https://www.cnblogs.com/z-books/p/5038481.html
Copyright © 2011-2022 走看看