我在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
答案 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发行版没有包含他的解决方法(可能是因为没有测试用例来检查这个问题。没有测试用例失败,没问题)。
我很高兴专家在我面前偶然发现了这个问题。