2010-03-29 10 views
22

En CentOS 5.4, OpenSSL compila bien sin la opción 'compartida'. Pero cuando pasé esa opción la compilación falla con:¿Compila OpenSSL con la opción 'compartida'?

/usr/bin/ld: libcrypto.a (x86_64-gcc.o): R_X86_64_32 reubicación contra `un símbolo local' no se puede utilizar al realizar una objeto compartido; recompile con -fPIC

Cuando intento: ./config shared CFLAGS=-fPIC que no funciona.

¿Qué puedo hacer para que OpenSSL compile con la opción 'compartida'?

Gracias

+3

¿Hizo "make clean" entre ejecutar sin compartir y ejecutarlo con shared? ¿Qué versión de OpenSSL es esto? – NUXI

Respuesta

1

El OpenSSL versión 1.0 (publicada hoy) funciona bien con la opción compartida

+3

Bueno, yo todavía tengo el mismo problema con 1.0.0j – arved

+0

@arved Confirmado el 64 de Ubuntu 16.04.1 LTS con CMake v2.8: el uso de 'shared' -fPIC se queja de' libcrypto.a' no se construye con '-fPIC' . – DevNull

21

mismo problema aquí, pero por lo general Makefile tendrá en cuenta las variables de entorno para el compilador o enlazador opciones.

Por lo tanto, si se coloca la opción -fPIC antes de llamar al script de configuración, se debe cuidar de él. Puede hacerlo con:

CFLAGS=-fPIC ./config shared --prefix=/your/path 

o

export CFLAGS=-fPIC 
./config shared --prefix=/your/path 

que trabajó para mí.

+6

+1 - Encontré esto hoy en un proyecto totalmente diferente, y puedo confirmar que esto funciona a la perfección. ¡Solo recuerda "limpiar" si ya has intentado construirlo sin esta línea de comando correcta! – ZXcvbnM

13

hay una opción -fXXX que puede pasar en las configuraciones para que pueda hacerlo con:

./config -fPIC shared 
+5

Asegúrese de "limpiar" antes de agregar -fPIC si ha intentado construir antes. – jfritz42

+1

necesitan una secuencia de comandos 2KLOC Perl para armar algunas opciones de línea de comandos y ni siquiera pueden hacerlo bien en la plataforma supuestamente más popular (Linux x64). Estoy seguro de que hay una lección aquí en algún lado. – cap

+0

¡Sí, se llama uso autoconf de GNU como todos los demás! – Gargoyle

0

Así es como he construido OpenSSL con las bibliotecas compartidas. Tenga en cuenta que estoy usando un compilador cruzado así que especifico cosas que la mayoría no haría.

# 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 
Cuestiones relacionadas