2010-03-29 18 views
22

W CentOS 5.4, OpenSSL kompiluje dobrze bez opcji "współdzielonej". Ale kiedy mijałem tę opcję kompilacja nie powiedzie się z:Skompiluj OpenSSL z opcją "shared"?

/usr/bin/ld: libcrypto.a (x86_64-gcc.o): relokacja R_X86_64_32 przeciwko `miejscowym symbolem” nie może być używany podczas dokonywania obiekt wspólny; rekompilacja z -fPIC

Kiedy próbuję: ./config shared CFLAGS=-fPIC to nie działa.

Co mogę zrobić, aby uzyskać OpenSSL do kompilacji z opcją "shared"?

Dzięki

+3

Czy "wyczyściliście" między uruchomieniem bez udostępniania i uruchomieniem go z udostępnianiem? Jaka jest wersja OpenSSL? – NUXI

Odpowiedz

1

OpenSSL wersja 1.0 (opublikowane dzisiaj) współpracuje z udostępnionego opcja

+3

Cóż, wciąż mam ten sam problem z 1.0.0j – arved

+0

@arved Potwierdzony na Ubuntu 16.04.1 LTS x64 z CMake v2.8: używanie '-fPIC shared' narzeka na' libcrypto.a' nie budowane z '-fPIC' . – DevNull

21

sam problem tutaj, ale zwykle Makefile rozważy zmienne środowiskowe dla opcji kompilatora lub łącznika.

Tak więc, jeśli przedkładaszopcję przed wywoływaniem skryptu konfiguracyjnego, powinno to zająć. Można to zrobić z:

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

lub

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

on pracował dla mnie.

+6

+1 - Napotkano to dzisiaj na zupełnie inny projekt i można potwierdzić, że działa idealnie. Po prostu pamiętaj, aby "wyczyścić", jeśli już próbowałeś budować bez tej poprawnej linii poleceń! – ZXcvbnM

13

Istnieje opcja -fXXX które można przekazać do config więc można zrobić z:

./config -fPIC shared 
+5

Pamiętaj, aby "wyczyścić" przed dodaniem -fPIC, jeśli wcześniej próbowałeś budować. – jfritz42

+1

potrzebują skryptu 2KLOC Perl, aby zestawić kilka opcji wiersza poleceń i nie mogą nawet uzyskać tego na prawdopodobnie najbardziej popularnej platformie (Linux x64). Jestem pewien, że gdzieś tu jest lekcja. – cap

+0

Tak, nazywa się to używanie autoconf GNU jak wszyscy inni! – Gargoyle

0

Oto jak zbudowany z OpenSSL bibliotek współdzielonych. Zwróć uwagę, że używam kompilatora krzyżowego, więc określam rzeczy, których większość by nie robił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