2015-02-10 15 views
7

Tôi tải xuống mã nguồn curl7.40 và tôi đã biên dịch openssl 1.0.2 mã nguồn, Bây giờ tôi muốn biên dịch curl với openssl 1.0.2.Cách biên dịch curl với openssl mới nhất

./configure --prefix=/usr/local/curl-7.40.0 --with-ssl 
--with-libssl-prefix=/usr/local/openssl-1.0.2 

make && make install 

Sau khi cài đặt, tôi ldd thư viện curl nhưng vẫn liên kết với thư viện mặc định của hệ thống. ldd libcurl.so linux-vdso.so.1 => (0x00007fff2db2e000) libidn.so.11 => /usr/lib/x86_64-linux-gnu/libidn.so.11 (0x00007fafb9b6e000) librtmp.so.0 => /usr/lib/x86_64-linux-gnu/librtmp.so.0 (0x00007fafb9954000) libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fafb96f5000) libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fafb931b000) ...

CẬP NHẬT
Sau khi một số tìm kiếm, tôi sử dụng dưới lệnh để cấu hình.

./configure --prefix=/usr/local/curl-7.40.0 --with-ssl=/usr/local/openssl-1.0.2

Nhưng khi cài đặt, nó sẽ hiển thị thông tin lỗi bên dưới.

../lib/.libs/libcurl.so: undefined reference to `SSLv2_client_method' 
collect2: error: ld returned 1 exit status 
+0

Hỗ trợ SSLv2 được xóa khỏi openssl 1.0.2. Bạn có thể đã bao gồm từ một phiên bản SSL và thư viện từ một phiên bản khác. Nhìn vào nhật ký biên dịch. Có cái gì đó như '-I/usr/local/openssl-1.0.2/include'? –

+0

có, openssl loại bỏ hỗ trợ sslv2, nhưng có vẻ như libcurl vẫn còn sử dụng nó. và từ một số kết quả tìm kiếm đề xuất sửa đổi libcurl mã nguồn lib/ssluse.c để nhận xét nó, nhưng trong 7.40, tôi không tìm thấy tệp này. –

+0

libcurl biết để phát hiện xem openssl có hỗ trợ sslv2 ở giai đoạn cấu hình hay không. Nhìn vào config.log và/hoặc config.h. –

Trả lời

1

Sự cố có thể là cách bạn đã xây dựng thư viện OpenSSL.

Có thể bạn đã xây dựng openssl với SSLv2 bị vô hiệu hóa vì một số bản phân phối đã tắt SSLv2 theo mặc định. Hãy xem ./config cho hệ thống của bạn khi bạn đang biên dịch OpenSSL và tìm tùy chọn kiểm soát cờ tiền xử lý OPENSSL_NO_SSL2.
Để sử dụng đúng phiên bản openssl khi thực hiện từ nguồn, bạn có thể làm cho openssl như thế này:

cd <path-to-openssl-dir> 
./config enable-ssl2 enable-ssl3 --prefix=<path-to-openssl-install-dir> 

Sau đó, bạn có thể liên kết phiên bản curl của bạn đúng cách để openssl bởi:

./configure --with-ssl=<path-to-openssl-install-dir> 
0

SSLv2_client_method() được sử dụng trong lib/vtls/openssl.c, dòng 1575 với số check để có sẵn chức năng này qua autoconf. Dường như với tôi rằng AC_CHECK_FUNCS của autoconf không chính xác tìm thấy cài đặt hệ thống của bạn của openssl đã bật SSLv2 trước khi #include cài đặt openssl-1.0.2 của riêng bạn mà không có SSLv2_client_method() và do đó giả định chức năng có sẵn.

Hãy thử qua CFLAGS=-I/usr/local/openssl-1.0.2/include hoặc thậm chí "CFLAGS=-I/usr/local/openssl-1.0.2/include -DOPENSSL_NO_SSL2" như các đối số để ./configure để buộc openssl.c để làm gì nếu không có sự SSLv2_client_method() sai giả định là có sẵn.

Các vấn đề liên quan