Скомпилировать OpenSSL с опцией "shared"?
В CentOS 5.4 OpenSSL компилируется без опции "shared". Но когда я передал эту опцию, компиляция завершилась неудачей:
/usr/bin/ld: libcrypto.a(x86_64-gcc.o): перемещение R_X86_64_32 против "локального символа" не может использоваться при создании общего объекта; перекомпилировать с помощью -fPIC
Когда я пытаюсь: ./config shared CFLAGS=-fPIC
, это не сработает.
Что я могу сделать, чтобы заставить OpenSSL скомпилироваться с опцией "shared"?
Спасибо
Ответы
Ответ 1
Такая же проблема здесь, НО обычно Makefiles будет рассматривать переменные среды для параметров компилятора или компоновщика.
Итак, если вы поместите параметр -fPIC
перед вызовом configure script, он должен позаботиться об этом. Вы можете сделать это с помощью:
CFLAGS=-fPIC ./config shared --prefix=/your/path
или
export CFLAGS=-fPIC
./config shared --prefix=/your/path
Это сработало для меня.
Ответ 2
Существует опция -fXXX
, которую вы можете передать в config, чтобы вы могли сделать это с помощью
./config -fPIC shared
Ответ 3
OpenSSL версия 1.0 (опубликованная сегодня) отлично работает с общей опцией
Ответ 4
Вот как я построил OpenSSL с общими библиотеками. Обратите внимание, что я использую кросс-компилятор, поэтому я указываю, что большинство не будет.
# hop into the downloads folder
cd ~/Downloads
# get the branch of openssl you want
git clone -b OpenSSL_1_0_2-stable --single-branch https://github.com/openssl/openssl.git
# make an installation directory
mkdir openssl-install
# go into the cloned openssl directory
cd openssl
# absolute paths needed for the configure
# the "-fPIC -mhard-float" are CFLAGS specific to my project
# the "-shared" is what creates the .so files
# find your desired configuration with `./Configure LIST`
./Configure linux-mips32 --prefix=/home/myusername/Downloads/openssl-install --openssldir=/system/ssl -fPIC -mhard-float -shared
# run the make file (with my specific compiler)
make CC=mips-linux-gnu-gcc RANLIB=mips-linux-gnu-ranlib LD=mips-linux-gnu-ld MAKEDEPPROG=mips-linux-gnu-gcc PROCESSOR=MIPS