无法在solaris 10上的python中编译_ssl

时间:2015-02-05 02:36:32

标签: python ssl openssl solaris

我正在尝试在Sparc Solaris 10机器上编译python 2.7.9。我已成功安装它,但_ssl:

除外
Python build finished, but the necessary bits to build these modules were not found:
_bsddb             _ssl               _tkinter
bsddb185           gdbm               linuxaudiodev
ossaudiodev

安装了OpenSSL,libs和includes包含在这里:

此处的库:/usr/sfw/lib并在此处包含:/usr/sfw/include/openssl

libs是:

lrwxrwxrwx   1 root     root          17 May 16  2014 libssl.so -> ./libssl.so.0.9.7
-rwxr-xr-x   1 root     bin      1424312 Jun 27  2013 libssl.so.0.9.7
-rwxr-xr-x   1 root     bin       151540 Jun 27  2013 libssl_extra.so.0.9.7
-rw-r--r--   1 root     bin          293 Jan 22  2005 llib-lssl
-rw-r--r--   1 root     bin       279739 Jun 21  2013 llib-lssl.ln

因此,经过一些研究后,似乎python只检查标准路径中是否存在lib:

e.g。 /usr/local/ssl/lib& /usr/local/ssl/include

解决它的过程是(我相信)在源代码树中编辑setup.py并添加这些部分的路径,如:

    ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs,
                                 ['/usr/sfw/lib',
                                  '/usr/local/ssl/lib',
                                  '/usr/contrib/ssl/lib/'
                                 ] )

...和...

    search_for_ssl_incs_in = [
                          '/usr/sfw/include/openssl',
                          '/usr/local/ssl/include',
                          '/usr/contrib/ssl/include/'
                         ]

我正在清理,然后再次运行此配置:

./configure --prefix=/opt/python-2.7.9 --enable-shared

...然后使用dmake重新编译。

仍然无法找到libs。我的解决方法是正确的吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

除了Joey Wilhelm的回应,

如果你正在编译python 2.7.9或任何其他版本(比如我在python 2.7.12上)。

您的机器应该出现某些必需的依赖项:

  • 如果是ubuntu:

    apt-get install libreadline -gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev -y

以上命令下载所需的依赖项

  1. 如果是Solaris:
  2. 您的计算机上应该存在等效依赖项。 如果它们不存在,请使用以下链接进行下载。 (确保可以访问互联网)

    /usr/sbin/pkgadd -d http://get.opencsw.org/now /opt/csw/bin/pkgutil -U

  3. 为ubuntu加载上面提到的(https://www.opencsw.org/package/python/)和其他依赖项的所有依赖项。这些包可在(https://www.opencsw.org/get-it/packages/

  4. 上找到
  5. 对于openssl,要求libssl.so在路径上可用,如果没有,可以在自定义位置安装openssl。

    我的自定义位置以进行额外安装:/ tmp / local

    (你也可以使用标准/ usr / local,但对我来说这些位置是只读的)

    curl https://www.openssl.org/source/openssl-1.0.2l.tar.gz |焦油xz&& cd openssl-1.0.2l&& ./config共享--prefix = / tmp / local /&&制造&& make install

    • 如果您已经有zlib(数据压缩),则不需要下面提到的步骤,否则请按照:
  6. https://zlib.net/fossils/zlib-1.2.11.tar.gz

    下载zlib
        tar -xvf zlib-1.2.11.tar.gz
        cd zlib-1.2.11
        ./configure --prefix=/tmp/local
        make
        make install
    
    • 这些依赖项应该存在于运行时编译器的适当路径下:

    Python安装脚本

        export LDFLAGS="-L/tmp/local/lib/ -L/usr/local/lib/"
    
        # Path /opt/csw/lib/ makes sure that required libraries that we downloaded are available to the compiler
        export LD_LIBRARY_PATH="/tmp/local/lib/:/opt/csw/lib/:/usr/local/lib/"
        export CPPFLAGS="-I/tmp/local/include -I/tmp/local/include/openssl"
        export CFLAGS="-I/tmp/local/include -I/tmp/local/include/openssl"
    
        wget https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz | tar xzf Python-2.7.12.tgz && cd Python-2.7.12 
        ./configure --prefix=/tmp/python/ 
        make install
    
    • 最后你的python构建可以在/ tmp / python(可以选择适当的路径)

    默认构建将是32位python。如果你想构建64位python,你需要导入相应的64位库并保持它们的路径。

    注意:

    64位python构建生成的重要路径是

      

    的/ opt / CSW / LIB / SPARCV9

         

    的/ opt / CSW / LIB / 64

    在标志

    中设置-m64位也很重要

    如果您有/usr/sfw/lib/libssl.so文件,则不需要构建自定义openssl,您可以在标志中添加/ usr / sfw / lib /和/ usr / sfw / include路径。

    确保使用命令构建openssl:

    cd openssl-1.0.1e
    ./Configure solaris64-sparcv9-cc --prefix=<path> shared
    make
    make install
    

    验证64位python安装:

      

    Python 2.7.12(默认,2017年6月6日,08:34:21)

         关于sunos5的

    GCC 4.5.2]

         

    导入平台

         

    platform.architecture()

         

    ('64bit','ELF')

答案 1 :(得分:0)

事实证明,解决方案并非如此简单。它实际上是两部分。首先,您的Python构建不会在适当的位置查找SSL标头和库。那部分,我能够用这里提供的环境变量来解决:How do I compile Python 3.4 with custom OpenSSL?

第二部分是Python不再支持OpenSSL&lt; 0.9.8。所以,你将不得不升级到更新的版本。但是,看来Sunfreeware提供的是OpenSSL 1.0.1h,而unixpackages.com提供的是OpenSSL 1.0.2a,所以这些似乎是要走的路。