1

尝试构建一个完全独立的 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 的 Make 失败如下:

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

我们说的是 Ubuntu 10.04。非常感谢任何帮助 - 谢谢!

4

3 回答 3

5

“在制作共享对象时不能使用;使用 -fPIC 重新编译”意味着 SSL 不是使用 Position Independent Code 标志构建的。这是将其构建为动态共享对象 (DSO) 所必需的。这可能是 Erlang 构建过程需要的。示例构建:

$ tar zxvf openssl-0.x.tar.gz
$ cd openssl-x
$ sh config shared -fPIC
$ make
$ sudo make install
于 2011-07-11T06:05:18.300 回答
1

对于 ppc64le:

./configure --prefix=/home/huaxin/huaxin/toolsInstalled/ --build=ppc64le CFLAGS="-D_GNU_SOURCE -DOPENSSL_NO_EC=1"
于 2016-01-28T09:19:32.460 回答
0

我建议您在具有 sudo 权限的 VM 上构建。然后使用 --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 上运行。

请参阅这个问题Compiling Python 2.6.6 and need for external packages wxPython, setuptools, etc... in Ubuntu,了解有关我如何以这种方式构建 Python 的更多详细信息。

于 2011-07-14T05:33:20.137 回答