2010-03-29 31 views
22

Trên CentOS 5.4, OpenSSL biên dịch tốt mà không có tùy chọn 'chia sẻ'. Nhưng khi tôi thông qua tùy chọn đó biên soạn không thành công với:Biên dịch OpenSSL với tùy chọn 'được chia sẻ'?

/usr/bin/ld: libcrypto.a (x86_64-gcc.o): di dời R_X86_64_32 chống lại 'một biểu tượng địa phương' không thể được sử dụng khi thực hiện một đối tượng được chia sẻ; biên dịch lại với -fPIC

Khi tôi thử: ./config shared CFLAGS=-fPIC không hoạt động.

Tôi có thể làm gì để OpenSSL biên dịch với tùy chọn 'được chia sẻ'?

Cảm ơn

+3

Bạn đã "làm sạch" giữa khi chạy mà không chia sẻ và chạy nó với chia sẻ? Phiên bản OpenSSL này là gì? – NUXI

Trả lời

1

Các OpenSSL phiên bản 1.0 (công bố ngày nay) hoạt động tốt với các tùy chọn chia sẻ

+3

Tôi vẫn gặp phải sự cố tương tự với 1.0.0j – arved

+0

@arved Được xác nhận trên Ubuntu 16.04.1 LTS x64 với CMake v2.8: sử dụng '-fPIC shared' than phiền về' libcrypto.a' không được tạo bằng '-fPIC' . – DevNull

21

Cùng một vấn đề ở đây, NHƯNG thường Makefiles sẽ xem xét các biến môi trường cho trình biên dịch hoặc mối liên kết tùy chọn.

Vì vậy, nếu bạn đặt tùy chọn -fPICtrước khi gọi tập lệnh định cấu hình, bạn nên quản lý nó. Bạn có thể làm điều đó với:

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

hoặc

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

Nó làm việc cho tôi.

+6

+1 - Đã gặp phải điều này ngày hôm nay trên một dự án hoàn toàn khác và có thể xác nhận điều này hoạt động hoàn hảo. Chỉ cần nhớ để 'làm sạch' nếu bạn đã cố gắng xây dựng nó mà không có dòng lệnh chính xác này! – ZXcvbnM

13

Có một tùy chọn -fXXX mà bạn có thể vượt qua để cấu hình để bạn có thể làm điều đó với:

./config -fPIC shared 
+5

Hãy chắc chắn "làm sạch" trước khi thêm -fPIC nếu bạn đã thử xây dựng trước đó. – jfritz42

+1

họ cần một kịch bản 2KLOC Perl để đặt cùng một vài tùy chọn dòng lệnh và thậm chí họ không thể có được nó ngay trên nền tảng phổ biến nhất (Linux x64). Tôi chắc rằng có một bài học ở đây đâu đó. – cap

+0

Yup, nó được gọi là sử dụng GNU autoconf như mọi người khác! – Gargoyle

0

Đây là cách tôi xây dựng OpenSSL với các thư viện chia sẻ. Lưu ý rằng tôi đang sử dụng một trình biên dịch chéo vì vậy tôi chỉ định những thứ không nhất.

# 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 
Các vấn đề liên quan