Ошибка OpenSSL при сборке Erlang OTP из источника - PullRequest
1 голос
/ 08 июля 2011

Попытка создать полностью автономную 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

Make of 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. Любая помощь с благодарностью - спасибо!

Ответы [ 3 ]

5 голосов
/ 11 июля 2011

«Нельзя использовать при создании общего объекта; перекомпиляция с -fPIC» будет означать, что SSL не создается с флагом Независимого от позиции кода.Это необходимо для построения его как динамического общего объекта (DSO).Это, вероятно, необходимо для процесса сборки Erlang.Пример сборки:

$ tar zxvf openssl-0.x.tar.gz
$ cd openssl-x
$ sh config shared -fPIC
$ make
$ sudo make install
1 голос
/ 28 января 2016

Для ppc64le:

./configure --prefix=/home/huaxin/huaxin/toolsInstalled/ --build=ppc64le CFLAGS="-D_GNU_SOURCE -DOPENSSL_NO_EC=1"
0 голосов
/ 14 июля 2011

Я предлагаю вам создать виртуальную машину, на которой у вас есть права sudo.Затем соберите библиотеки, такие как OpenSSL, используя --prefix = / usr, чтобы make install поместил их в обычную системную библиотеку.

Затем соберите свой инструмент, в данном случае Erlang, используя -rpath.Затем используйте ldd, чтобы найти все зависимости библиотек для Erlang и любых портов (расширения C) и скопировать их в каталог lib Erlangs.Проверьте все двоичные файлы и библиотеки с помощью readelf -d, чтобы убедиться, что RPATH установлен в $ ORIGIN или $ ORIGIN /../ lib, если необходимо.Используйте patchelf, чтобы исправить эти вещи, если процесс компоновки не совсем правильный (или вы скопировали во вторичные зависимости системных библиотек).

Затем используйте patchelf, чтобы установить интерпретатор для ваших двоичных файлов (не библиотек), чтобы он указывал на ld-linux.so.2 в каталоге lib Эрланга.А затем запустите тестовый набор, используя

strace -e open erl ..., чтобы убедиться, что ваша сборка ничего не открывает в / lib или /usr/lib.

На этом этапе смонтируйте его, и он будетзапустить на любом Linux.

См. этот вопрос Компиляция Python 2.6.6 и необходимость внешних пакетов wxPython, setuptools и т. д ... в Ubuntu для получения более подробной информации о том, как я собирал Python вэта мода.

...