【问题标题】:OpenSSL error building Erlang OTP from source从源代码构建 Erlang OTP 的 OpenSSL 错误
【发布时间】:2011-09-30 21:16:36
【问题描述】:

尝试构建一个完全独立的 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。非常感谢任何帮助 - 谢谢!

【问题讨论】:

  • 如果您尝试使用 CFLAGS=-fPIC make 构建 Erlang 会发生什么?
  • 您使用的是 64 位计算机吗?什么操作系统?
  • 你有安装 openssl 和 libssl-dev 吗?

标签: erlang openssl installation ld rpath


【解决方案1】:

“在创建共享对象时不能使用;使用 -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

【讨论】:

  • 这个解决方案在我尝试使用旧的 openssl 版本构建 Apache 时帮助了我!谢谢!
【解决方案2】:

我建议您在具有 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 上运行。

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

【讨论】:

    【解决方案3】:

    对于 ppc64le:

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

    【讨论】:

      猜你喜欢
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      相关资源
      最近更新 更多