Python在Solaris 10上构建失败

时间:2015-01-31 23:43:01

标签: python openssl solaris-10

我在Solaris上使用自建Python多年没有任何问题。 最近,我需要安装更新版本的openssl,因为现有版本的openssl(包含在Solaris 10中)不再与最新的安全协议完全兼容(即我不能从Solaris机箱中ssh)。

所以,我安装了较新版本的openssl,首先是openssl-1.0.1l,后来是openssl-1.0.2。使用较新版本的openssl,我可以再次从我的Solaris盒中删除。

但是,当我使用netowrk-x运行Python脚本时,Python就会出现问题,这对我的旧环境来说很好。

我重新编译了Python(2.7.9)并发现我无法构建_hashlib和_ssl模块。

这个问题很奇怪。 相关的错误消息是:

ld: fatal: relocations remain against allocatable but non-writable section

(编译日志的摘要版本附在文本末尾)

在openssl安装期间生成的两个库文件libssl.a和libcrypto.a似乎没有正确生成(至少对于Solaris env)。

但是,我真的不知道如何从这里开始。 有人可以帮我解决这个问题吗? 任何建议都将不胜感激。

谢谢! 阿基 -

% make
running build
running build_ext
warning: ldd: /usr/local/lib/libreadline.so: is not executable
building dbm using ndbm
building '_ssl' extension
gcc -fPIC -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -I/usr/local/include -I/home/neko/gnu/Python-2.7.9/Include -I/home/neko/gnu/Python-2.7.9 -c /home/neko/gnu/Python-2.7.9/Modules/_ssl.c -o build/temp.solaris-2.10-sun4u.32bit-2.7/home/neko/gnu/Python-2.7.9/Modules/_ssl.o
gcc -shared build/temp.solaris-2.10-sun4u.32bit-2.7/home/neko/gnu/Python-2.7.9/Modules/_ssl.o -L/usr/local/ssl/lib -L/usr/local/lib -lssl -lcrypto -o build/lib.solaris-2.10-sun4u.32bit-2.7/_ssl.so
Text relocation remains  referenced
    against symbol          offset  in file
<unknown>        0x1198      /usr/local/ssl/lib/libssl.a(s3_lib.o)
<unknown>        0x119c      /usr/local/ssl/lib/libssl.a(s3_lib.o)
<unknown>        0x11a0      /usr/local/ssl/lib/libssl.a(s3_lib.o)

....

BN_set_bit       0x1a90      /usr/local/ssl/lib/libcrypto.a(bn_gf2m.o)
BN_set_bit       0x1c44      /usr/local/ssl/lib/libcrypto.a(bn_gf2m.o)
<unknown>        0x4         /usr/local/ssl/lib/libcrypto.a(bn_ctx.o)
<unknown>        0xc         /usr/local/ssl/lib/libcrypto.a(bn_ctx.o)
<unknown>        0x20        /usr/local/ssl/lib/libcrypto.a(bn_ctx.o)
<unknown>        0x1b0       /usr/local/ssl/lib/libcrypto.a(bn_ctx.o)
<unknown>        0x1c0       /usr/local/ssl/lib/libcrypto.a(bn_ctx.o)
<unknown>        0x1cc       /usr/local/ssl/lib/libcrypto.a(bn_ctx.o)
<unknown>        0x464       /usr/local/ssl/lib/libcrypto.a(bn_ctx.o)
<unknown>        0x46c       /usr/local/ssl/lib/libcrypto.a(bn_ctx.o)
<unknown>        0x4f0       /usr/local/ssl/lib/libcrypto.a(bn_ctx.o)
<unknown>        0x4f4       /usr/local/ssl/lib/libcrypto.a(bn_ctx.o)
ld: fatal: relocations remain against allocatable but non-writable sections
collect2: ld returned 1 exit status
building '_hashlib' extension
gcc -fPIC -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -I/usr/local/include -I/home/neko/gnu/Python-2.7.9/Include -I/home/neko/gnu/Python-2.7.9 -c /home/neko/gnu/Python-2.7.9/Modules/_hashopenssl.c -o build/temp.solaris-2.10-sun4u.32bit-2.7/home/neko/gnu/Python-2.7.9/Modules/_hashopenssl.o
gcc -shared build/temp.solaris-2.10-sun4u.32bit-2.7/home/neko/gnu/Python-2.7.9/Modules/_hashopenssl.o -L/usr/local/ssl/lib -L/usr/local/lib -lssl -lcrypto -o build/lib.solaris-2.10-sun4u.32bit-2.7/_hashlib.so
Text relocation remains  referenced
    against symbol          offset  in file
<unknown>        0x6a0       /usr/local/ssl/lib/libcrypto.a(tasn_fre.o)
<unknown>        0x6a4       /usr/local/ssl/lib/libcrypto.a(tasn_fre.o)
<unknown>        0x6a8       /usr/local/ssl/lib/libcrypto.a(tasn_fre.o)

....


i2d_ASN1_TYPE    0x6dc       /usr/local/ssl/lib/libcrypto.a(a_strex.o)
i2d_ASN1_TYPE    0x70c       /usr/local/ssl/lib/libcrypto.a(a_strex.o)
i2d_ASN1_TYPE    0x8d0       /usr/local/ssl/lib/libcrypto.a(asn1_gen.o)
i2d_ASN1_TYPE    0x4ac       /usr/local/ssl/lib/libcrypto.a(v3_conf.o)
ld: fatal: relocations remain against allocatable but non-writable sections
collect2: ld returned 1 exit status
building 'dbm' extension
gcc -fPIC -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_NDBM_H -I. -IInclude -I./Include -I/usr/local/include -I/home/neko/gnu/Python-2.7.9/Include -I/home/neko/gnu/Python-2.7.9 -c /home/neko/gnu/Python-2.7.9/Modules/dbmmodule.c -o build/temp.solaris-2.10-sun4u.32bit-2.7

....

Failed to build these modules:
_curses            _curses_panel      _hashlib        _ssl

1 个答案:

答案 0 :(得分:0)

我做了另一次寻找解决方案的尝试,并找到了2013年发布的解决方案: Tom Kacvinsky发表: http://openssl.6102.n7.nabble.com/PIC-code-on-Sparc-Solaris-td47300.html

实质上,你需要做两件事:

(1)使用-fPIC运行./config

% ./config --prefix=<target_dir> no-shared -fPIC

这将-fPIC(生成位置无关代码)添加到库编译的gcc选项

(2)将sparccpuid.S组装到位置无关代码

% gcc -I... -D... -E sparcpuid.S > sparcpuid.s
% as -V -Qy -s -xarch=v8plusa -K PIC -xcode=pic32 sparcpuid.s

-xcode = pic32是秘密来源。

//

按照他的指示,我设法用hashlib ssl支持构建Python。而且,我使用network-x的python程序再次运行。

我不知道他的解决方案是否是最佳的,但它解决了我的问题。我不知道为什么openssl发行版没有包含他的解决方法(可能是因为没有测试用例来检查这个问题。没有测试用例失败,没问题)。

我很高兴专家在我面前偶然发现了这个问题。