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

如果你嘗試用'CFLAGS = -fPIC make'打造二郎會發生什麼? – 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權限的虛擬機上構建。然後使用--prefix =/usr構建類似OpenSSL的庫,以便make install將它們放入通常的系統庫中。

然後使用-rpath構建您的工具,在這種情況下是Erlang。然後使用ldd查找Erlang和任何端口(C擴展)的所有庫依賴關係,並將其複製到Erlang的lib目錄中。使用readelf -d檢查所有二進制文件和庫,以確保根據需要將RPATH設置爲$ ORIGIN或$ ORIGIN /../ lib。如果鏈接過程不完全正確(或者您在系統庫的輔助依賴項中複製),請使用patchelf修復這些問題。

然後使用patchelf爲你的二進制文件(不是庫)設置解釋器,指向Erlang的lib目錄中的ld-linux.so.2。然後使用

strace -e open erl ...運行測試套件,以確保您的構建不打開/ lib或/ usr/lib中的任何內容。

在這一點上,它可以運行在任何Linux上。

看到這個問題Compiling Python 2.6.6 and need for external packages wxPython, setuptools, etc... in Ubuntu關於我如何以這種方式構建Python的更多細節。

1

對於ppc64le:

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