从源代码构建Erlang OTP时发生OpenSSL错误

从源代码构建Erlang OTP时发生OpenSSL错误,erlang,openssl,installation,ld,rpath,Erlang,Openssl,Installation,Ld,Rpath,试图构建一个完全独立的OTP,该OTP可以独立于系统上安装的LIB进行移动 从源代码构建OpenSSL 1.0.0d,如下所示: ./config --prefix=<open-ssl-dir> make make install relocation R_X86_64_32 against `OPENSSL_ia32cap_P' can not be used when making a shared object; recompile with -fPIC 我们说的是Ubun

试图构建一个完全独立的OTP,该OTP可以独立于系统上安装的LIB进行移动

从源代码构建OpenSSL 1.0.0d,如下所示:

./config --prefix=<open-ssl-dir>
make
make install
relocation R_X86_64_32 against `OPENSSL_ia32cap_P' can not be used when making a shared object; recompile with -fPIC
我们说的是Ubuntu 10.04。非常感谢您的帮助-谢谢

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

$ tar zxvf openssl-0.x.tar.gz
$ cd openssl-x
$ sh config shared -fPIC
$ make
$ sudo make install
“创建共享对象时不能使用;使用-fPIC重新编译”意味着SSL不是使用位置独立代码标志构建的。这是将其构建为动态共享对象(DSO)所必需的。这可能是Erlang构建过程所需要的。示例构建:

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

我建议您在拥有sudo权限的VM上构建。然后使用--prefix=/usr构建类似OpenSSL的库,以便makeinstall将它们放入常用的系统库中

然后使用-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中打开任何内容

在这一点上,它将在任何Linux上运行


有关我如何以这种方式构建Python的更多详细信息,请参见此问题。

我建议您在拥有sudo权限的VM上构建。然后使用--prefix=/usr构建类似OpenSSL的库,以便makeinstall将它们放入常用的系统库中

然后使用-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中打开任何内容

在这一点上,它将在任何Linux上运行

有关我如何以这种方式构建Python的更多详细信息,请参见此问题。

对于ppc64le:

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

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

如果您尝试使用
CFLAGS=-fPIC make
构建Erlang会发生什么?您是否在64位机器上?什么操作系统?您是否安装了openssl和libssl dev?如果您尝试使用
CFLAGS=-fPIC make
构建Erlang会发生什么?您是否在64位机器上?什么操作系统?您是否安装了openssl和libssl dev?这个解决方案在尝试使用旧的openssl版本构建Apache时帮助了我!非常感谢。当我尝试使用旧的openssl版本构建Apache时,这个解决方案帮助了我!非常感谢。