2011-07-07 19 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

はどうなりますか? – 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の権限を持つ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のいずれも開いていないことを確認します。

この時点で、それはすべてのLinux上で実行されます。

私がこのようにしてPythonをどのように構築したかについては、この質問Compiling Python 2.6.6 and need for external packages wxPython, setuptools, etc... in Ubuntuを参照してください。 ppc64leについては

1

:あなたは `CFLAGS = -fPIC make`でアーランを構築しようとした場合

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