尝试构建一个完全独立的OTP,可以独立于系统上安装的库移动。
从源代码构建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
使用Erlang然后失败如下:
relocation R_X86_64_32 against `OPENSSL_ia32cap_P' can not be used when making a shared object; recompile with -fPIC
我们正在谈论Ubuntu 10.04。非常感谢任何帮助 - 谢谢!
答案 0 :(得分:5)
“在创建共享对象时不能使用;使用-fPIC重新编译”将意味着SSL不是使用位置独立代码标志构建的。将其构建为动态共享对象(DSO)需要这样做。这可能是Erlang构建过程所需要的。示例构建:
$ tar zxvf openssl-0.x.tar.gz
$ cd openssl-x
$ sh config shared -fPIC
$ make
$ sudo make install
答案 1 :(得分:1)
对于ppc64le:
./configure --prefix=/home/huaxin/huaxin/toolsInstalled/ --build=ppc64le CFLAGS="-D_GNU_SOURCE -DOPENSSL_NO_EC=1"
答案 2 :(得分:0)
我建议你在拥有sudo权限的虚拟机上构建。然后使用--prefix = / usr构建像OpenSSL这样的库,以便make install将它们放在通常的系统库中。
然后使用-rpath构建您的工具,在本例中为Erlang。然后使用ldd
查找Erlang和任何端口(C扩展)的所有库依赖项,并将它们复制到Erlangs lib目录中。使用readelf -d检查所有二进制文件和库,以确保根据需要将RPATH设置为$ ORIGIN或$ ORIGIN /../ lib。如果链接过程不正确(或者您在系统库的辅助依赖项中复制),请使用patchelf来修复这些问题。
然后使用patchelf为二进制文件(而不是库)设置解释器,使其指向Erlang的lib目录中的ld-linux.so.2。然后使用
运行测试套件 strace -e open erl ...
以确保您的构建没有在/ lib或/ usr / lib中打开任何内容。
此时将其tar起来,它将在任何Linux上运行。
有关如何以这种方式构建Python的详细信息,请参阅此问题Compiling Python 2.6.6 and need for external packages wxPython, setuptools, etc... in Ubuntu。