2011-07-07 28 views
1

尝试构建一个完全独立的OTP,可独立于系统上安装的库移动。从源码构建Erlang OTP的OpenSSL错误

生成的OpenSSL 1.0.0d从源代码如下:

./config --prefix=<open-ssl-dir> 
make 
make install 

然后OTP R14B03:

./configure --prefix=<erlang-dir> --with-ssl=<open-ssl-dir> --without-termcap 

二郎制作失败,则如下:

relocation R_X86_64_32 against `OPENSSL_ia32cap_P' can not be used when making a shared object; recompile with -fPIC 

我们谈论Ubuntu 10.04。任何帮助非常感谢 - 谢谢!

+1

如果你尝试用'CFLAGS = -fPIC make'打造二郎会发生什么? – sarnold

+0

你在64位机器上吗?什么OS? – emboss

+0

您是否安装了openssl和libssl-dev? –

回答

5

“在创建共享对象时不能使用;使用-fPIC重新编译”将意味着SSL不是使用位置独立代码标志构建的。这是构建动态共享对象(DSO)所必需的。这可能是Erlang构建过程所需要的。构建示例:

$ tar zxvf openssl-0.x.tar.gz 
$ cd openssl-x 
$ sh config shared -fPIC 
$ make 
$ sudo make install 
+0

此解决方案帮助我尝试使用旧的openssl版本构建Apache!谢谢! –

0

我建议您在具有sudo权限的虚拟机上构建。然后使用--prefix =/usr构建类似OpenSSL的库,以便make install将它们放入通常的系统库中。

然后使用-rpath构建您的工具,在这种情况下是Erlang。然后使用ldd查找Erlang和任何端口(C扩展)的所有库依赖关系,并将其复制到Erlang的lib目录中。使用readelf -d检查所有二进制文件和库,以确保根据需要将RPATH设置为$ ORIGIN或$ ORIGIN /../ lib。如果链接过程不完全正确(或者您在系统库的辅助依赖项中复制),请使用patchelf修复这些问题。

然后使用patchelf为你的二进制文件(不是库)设置解释器,指向Erlang的lib目录中的ld-linux.so.2。然后使用

strace -e open erl ...运行测试套件,以确保您的构建不打开/ lib或/ usr/lib中的任何内容。

在这一点上,它可以运行在任何Linux上。

看到这个问题Compiling Python 2.6.6 and need for external packages wxPython, setuptools, etc... in Ubuntu关于我如何以这种方式构建Python的更多细节。

1

对于ppc64le:

./configure --prefix=/home/huaxin/huaxin/toolsInstalled/ --build=ppc64le CFLAGS="-D_GNU_SOURCE -DOPENSSL_NO_EC=1"