2010-03-29 78 views
22

在CentOS 5.4上,OpenSSL編譯沒有「共享」選項。但是,當我通過這個選項編譯失敗:使用'shared'選項編譯OpenSSL?

在/ usr/bin中/ LD:libcrypto.a下(x86_64-gcc.o):製作時對`局部符號」搬遷R_X86_64_32不能使用共享對象;使用-fPIC重新編譯

當我嘗試:./config shared CFLAGS=-fPIC不起作用。

我能做些什麼來讓OpenSSL與'shared'選項一起編譯?

感謝

+3

你在沒有共享的情況下運行和運行共享之間「乾淨」嗎?這是什麼OpenSSL版本? – NUXI 2010-03-30 03:24:31

回答

1

OpenSSL的(今天發表)版本1.0在這裏工作正常共享選項

+3

好吧,我仍然有1.0.0j – arved 2012-11-25 16:40:43

+0

@arved同樣的問題在Ubuntu 16.04.1 LTS x64與CMake v2.8確認:使用'-fPIC共享'抱怨'libcrypto.a'不是用'-fPIC'構建的。 – DevNull 2017-01-10 17:53:39

21

同樣的問題,但通常的Makefile將考慮編譯器或連接選項的環境變量。

因此,如果您在調用配置腳本之前將-fPIC選項置於之前,則應該照顧它。你可以做到這一點:

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

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

它爲我工作。

+6

+1 - 今天在一個完全不同的項目上遇到了這個問題,並且可以很好地證實它的正確性。如果你已經嘗試過在沒有這個正確的命令行的情況下構建它,請記住'make clean'! – ZXcvbnM 2014-07-19 08:05:59

13

有一個選項-fXXX可以傳遞到config這樣你就可以做到這一點:

./config -fPIC shared 
+5

如果您之前嘗試過構建,請務必在添加-fPIC之前先「乾淨」。 – jfritz42 2014-09-09 17:14:26

+1

他們需要一個2KLOC Perl腳本來放置幾個命令行選項,並且他們甚至無法在最流行的平臺(Linux x64)上正確使用它。我確信這裏有一個教訓。 – cap 2015-12-21 22:34:00

+0

是的,它被稱爲像其他人一樣使用GNU autoconf! – Gargoyle 2016-06-17 01:28:33

0

以下是我建的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