2013-02-04 36 views
12

Tôi mới sử dụng Qt, tôi đã thực hiện một số Googleing và không thể tìm thấy câu trả lời đủ chi tiết.Cách bao gồm OpenSSL trong dự án Qt

Tôi cần sử dụng OpenSSL trong dự án Qt dựa trên qmake của mình. Làm thế nào để tôi tải về/cài đặt/liên kết nó vì vậy tôi chỉ có thể làm một tuyên bố bao gồm và sử dụng các chức năng của nó trong mã của tôi?

+0

Hệ điều hành nào? – saeed

+0

Windows 7 64Bit – Mitch

+2

Bất cứ ai cũng biết cách thực hiện điều này cho mac thay thế? –

Trả lời

18

Giả sử Windows, bạn có thể tải xuống cài đặt từ Win32 OpenSSL Installation Project page. Bạn có thể chọn một cho các cửa sổ 64 bit đang phát triển hoặc cho 32-bit. Chỉ cần chạy thiết lập và mọi thứ sẽ được thực hiện dễ dàng. Các thư mục cài đặt mặc định là: C: \ OpenSSL-Win32
Trong Qt tạo, nếu sau đó bạn muốn liên kết một thư viện để dự án của bạn, bạn có thể chỉ cần thêm dòng này vào tập tin .pro của bạn (tệp dự án):

LIBS += -L/path/to -llibname 

vì vậy, đây là những gì chúng ta làm cho thư viện này (ví dụ liên kết ubsec.lib)

LIBS += -LC:/OpenSSL-Win32/lib -lubsec 

Chú ý đến -L-l. See this question. Bạn thậm chí không cần phải chỉ định .lib ở cuối tên thư viện.

Đối với bao gồm các file .h thêm dòng này vào tập tin .pro của bạn:

INCLUDEPATH += C:/OpenSSL-Win32/include 

sau đó bạn có thể bao gồm một tập tin như thế này:

#include <openssl/aes.h> 
+0

Cảm ơn rất nhiều. Đó là loại câu trả lời tôi đã tìm kiếm. – Mitch

+0

'ubsec.lib' là gì và nó có liên quan gì đến việc liên kết OpenSSL? – jww

+0

@jww Chỉ là một ví dụ. – saeed

0

nếu bạn đang sử dụng win7 và phiên bản qt của bạn đang kết hợp và u cài đặt openssl từ http://slproweb.com/products/Win32OpenSSL.html, đảm bảo rằng lib của bạn phải nằm trong OpenSSL-Win32/lib/MinGW và thêm "lib" vào trước libeay32.a và ssleay32.a。

+1

Có vẻ như một câu trả lời hay, nhưng bạn có thể rõ ràng hơn một chút không. Tx. –

+0

xin lỗi, thời gian dài kể từ lần đăng nhập cuối cùng. trước tiên bạn có thể làm theo http://stackoverflow.com/a/14681524/6193558 này sau đó thay đổi tên của hai tệp: libeay32.a ssleay32.a. Tôi giải quyết vấn đề này trong khi tham khảo giải pháp của người khác. hy vọng có thể giúp bạn. – loc

2

Tôi đã làm việc trên Win 7 (32) với Qt5 .5, và những câu trả lời này không hiệu quả đối với tôi.
Vì vậy, tôi chỉ muốn chia sẻ một giải pháp mà cuối cùng làm việc:

1. Tôi đã cài đặt OpenSSL trong C: \ OpenSSL-Win32
2. Trong c: \ OpenSSL-Win32 \ MinGW có hai tập tin thư viện:
libeay32.a & ssleay32.a
3. tôi đã thực hiện một bản sao của mỗi người trong số họ một đổi tên phần mở rộng:
libeay32.a -> libeay32.lib & ssleay32.a -> ssleay32.lib
4. tôi liên kết các thư viện trong file .pro của tôi theo cách này:
LIBS += -LC:/OpenSSL-Win32/lib/MinGW -llibeay32
LIBS += -LC:/OpenSSL-Win32/lib/MinGW -lssleay32
INCLUDEPATH += C:/OpenSSL-Win32/include
5. Tôi sao chép 3 file .dll từ C: \ OpenSSL-Win32:
(libeay32.dll, libssl32.dll, ssleay32.dll)
vào thư mục build/debug của tôi:
(xây dựng-XXXXX -Desktop_Qt_5_5_1_MSVC2012_32bit-Gỡ lỗi/gỡ lỗi)

Tôi hy vọng điều này sẽ hữu ích.

+0

Tôi không thấy có gì sai với câu trả lời an toàn. – dlewin

0

Nếu bạn sử dụng cmake như xây dựng hệ thống cho dự án của bạn, sau đó bạn có thể bao gồm FindOpenSSL.cmake như sau:

#set(OPENSSL_USE_STATIC_LIBS TRUE) # if you want to use static libssl.a and libcrypto.a 
include(FindOpenSSL) 
#add_executable(${PROJECT_NAME} ...) or add_library(${PROJECT_NAME} ...) 
target_link_libraries(${PROJECT_NAME} PRIVATE ${CMAKE_DL_LIBS} OpenSSL::SSL OpenSSL::Crypto) 

${CMAKE_DL_LIBS} được yêu cầu trên Linux hệ thống để tránh các lỗi liên kết thời gian thực như "biểu tượng dlopen không tìm thấy ... ". Trên cửa sổ nó trở nên trống rỗng.

Nếu openssl thư mục cài đặt không phải là tiêu chuẩn, thì bạn nên cung cấp OPENSSL_ROOT_DIR đến cmake, ví dụ: để thêm set(OPENSSL_ROOT_DIR "C:/msys64/mingw32") trước include hoặc để chỉ định -DOPENSSL_ROOT_DIR:PATH=C:/msys64/mingw32 đến cmake thực thi (trong "Dự án" -> "Cài đặt xây dựng" -> tab "CMake").

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