Budowanie libcurl z obsługą SSL w systemie Windows

Używam libcurl w aplikacji Win32 C++.

Mam curllib.VCPROJ projekt dodał do mojego rozwiązania i ustawić moje inne projekty zależą od niego.

Jak zbudować go z włączoną obsługą SSL?

Author: sharkin, 2008-10-13

10 answers

[6]}cóż, ponieważ ten post nie powiódł się bardzo, musiałem sam zagłębić się w tę sprawę.

sprawdź również inne odpowiedzi i komentarze, aby uzyskać dodatkowe informacje dotyczące innych wersji itp.

EDIT: ponieważ opublikowałem to Q, wydaje się, że są gotowe binaria udostępnione ze strony głównej curl. Sprawdź odpowiedź Jamesa.

No to zaczynamy:

-

Preprocesor

Następujące dwa symbole muszą być fed to the preprocessor to enable SSL for libcurl:

USE_SSLEAY
USE_OPENSSL

(libcurl używa OpenSSL do obsługi SSL)

Alternatywnie symbole mogą być dodawane bezpośrednio do pliku o nazwie setup.h W libcurlu, ale nie jestem zbyt zadowolony z modyfikowania kodu w dystrybucjach innych firm, chyba że naprawdę muszę.

PRZEBUDOWUJÄ ... C bibliotekÄ ™ libcurl, dostaĹ 'em teraz kilka bĹ' Ä ™ dĂłw o tym, Ĺźe nie znaleziono plikĂłw zawierajÄ ... cych OpenSSL. Oczywiście, ponieważ nie skonfigurowałem poprawnie dystrybucji OpenSSL jeszcze.

Kompilowanie binariów OpenSSL

Pobrałem dystrybucję źródłową OpenSSL 0.9.8 i rozpakowałem ją.

W katalogu głównym dystrybucji źródłowej znajduje się plik o nazwie INSTALL.W32, który opisuje jak skompilować binaria OpenSSL. Łańcuch budowania wymaga Perla, więc zainstalowałem najnowszą wersję ActivePerl.

Miałem pewne problemy z kompilacją, która może nie mieć zastosowania do wszystkich systemów, ale przejdę przez to tutaj na wypadek, gdyby ktoś doświadczył to samo.

Zgodnie z INSTALL.W32:

Uruchom następujące zadania wiersza poleceń z bieżącym katalogiem ustawionym na root dystrybucji źródłowej:

1> perl Configure VC-WIN32 --prefix=c:/some/openssl/dir

(Gdzie "c:/some/openssl/dir" powinien zostać zastąpiony przez katalog, w którym powinien być zainstalowany OpenSSL. Nie używaj spacji na tej ścieżce. Kompilacja dalej nie powiedzie się w takim przypadku)

2> ms\do_ms

Dla mnie ten krok był początkowo nieudany, ponieważ brakowało mi zmiennych środowiskowych OSVERSION i TARGETCPU. Ustawiłem je na 5.1.2600 i x86 odpowiednio. Możesz się skarżyć, że OSVERSION jest "szalony", ale przyjrzyj się bliżej, ten błąd jest dla WinCE i nie wpływa na konfigurację Win32. Aby uzyskać dostęp do wersji systemu operacyjnego, uruchom polecenie " ver " z wiersza polecenia lub uruchom winver.exe.

3> nmake -f ms\nt.mak (for static library)

Lub

3> nmake -f ms\ntdll.mak (for DLL)

Źródło teraz kompiluje. Zajęło około 5 minut na moim laptopie.

Po zakończeniu kompilacji, libs lub binaria zostały umieszczone in:

distroot / out32 - do statycznego budowania bibliotek

Lub

distroot / out32dll - dla DLL build

Budowanie i łączenie

Teraz wróć do visual studio i wskaż libs i dołącz ścieżkę do nagłówków. Pliki nagłówkowe znajdują się w distroot/inc32/openssl.

Pamiętaj, aby dodać libeay32.lib i ssleay32.lib jako wejście linkera.

Przebuduj projekt libcurl.

Błąd!

Przynajmniej dla mnie z tą wersją OpenSSL. narzekał na struct typedef w jednym z nagłówków OpenSSL. Nie mogłem znaleźć żadnych informacji na ten temat. Po godzinie googlowania złamałem własną zasadę i skomentowałem typedef z nagłówka OpenSSL, a na szczęście libcurl nie używał tego symbolu, więc zbudował dobrze.

Update: jak zauważył Jason, wydaje się, że problem ten zniknął od wersji 1.0.0 a.

Teraz, aby potwierdzić, że obsługa SSL jest włączona dla libcurl, uruchom następujący kod:

curl_version_info_data * vinfo = curl_version_info( CURLVERSION_NOW );
if( vinfo->features & CURL_VERSION_SSL )
    // SSL support enabled
else
    // No SSL

To proste.
 47
Author: sharkin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:08

Może to nie jest odpowiedź, której nikt nie szuka, ale po prostu pobrałem wstępnie skompilowane biblioteki DLL z tego linku znalezionego na http://curl.haxx.se/download.html

Przeprowadziłem test, który dostarczył sharkin, i if( vinfo->features & CURL_VERSION_SSL ) okazał się prawdziwy.
 8
Author: James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-24 23:01:02

Podczas kompilacji OpenSSL 1.0.0 na Windows z Visual Studio 2010, w końcu wyrzucił błąd 0x2:

NMAKE: fatal error U1077: '"C:\Program Files (x86) \ Microsoft Visual Studio 10.0 \VC \ BIN \ cl.EXE"': return code ' 0x2 '

Stop.

Wydaje się, że ten błąd zostanie wyrzucony z powodu flagi w pliku konfiguracyjnym Perla, a mianowicie-wx. Jak stwierdza dokumentacja MSDN:

Traktuje wszystkie ostrzeżenia kompilatora jako błędy. Dla nowego projektu, to może być najlepiej używać /wx we wszystkich kompilacjach; rozwiązanie wszystkich ostrzeżeń zapewni jak najmniej problemów z odnalezieniem kodu.

Po usunięciu wystąpień-wx w pliku Configure i ponownym wpisaniu poleceń tutaj został on dobrze zbudowany i przeszedł wszystkie testy.

 5
Author: GaMer13,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:52

Podążając za radą Roberta Oschlera, oto mój komentarz do pytania jako odpowiedź:

Możesz zbudować najnowszy libcurl (2012) z natywną obsługą SSL Dla windows używając symboli preprocesora: USE_WINDOWS_SSPI i USE_SCHANNEL zamiast OpenSSL.

 4
Author: fa.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-09 08:23:38

W moim przypadku follow plik curl README wystarczył.
Moja konfiguracja jest następująca:

    Visual Studio 2015 (VC14)
  • Biblioteka statyczna
  • Win64
  • curl wersja 7.57.0
  • OpenSSL 1.0.2

Kompilacja libCurl

  1. Pobierz tam źródło libcurl: https://curl.haxx.se/download.html
  2. rozpakuj plik i przejdź do folderu curl-7.57.0\projects
  3. Otwórz plik README i postępuj zgodnie z instrukcje, to doprowadziło mnie do zrobienia następujących:
    • Pobrano OpenSSL
    • wyodrębnij go i zmień jego nazwę na openssl, odłóż na bok folder curl , jest to ważne, ponieważ otworzysz projekt VS, który oczekuje, że znajdzie tam openssl.
    • Install Perl
    • uruchom narzędzie build-openssl.bat, aby wykonać kompilację openSSL. Z moimi ustawieniami stało się to następujące:
      .\build-openssl.bat vc14 x64 release ..\..\openssl\
      wystarczy uruchomić .\build-openssl.bat -help, aby dowiedzieć się więcej o parametry.
      Następnie możesz zobaczyć, że OpenSSL został skompilowany, ponieważ masz nowy folder tutaj: openssl\build\Win64
  4. Otwórz projekt Visual Studio curl-7.57.0\projects\Windows\VC14\curl-all.sln
  5. pamiętaj, aby ustawić projekt visual studio na potrzebną konfigurację kompilacji (LIB Release - LIB OpenSSL w moim przypadku)
  6. Zbuduj wszystko
  7. Biblioteka znajduje się w curl-7.57.0\build\Win64\VC14\LIB Release - LIB OpenSSL\libcurl.lib

Uwagi

  • nie zapomnij zdefiniować preprocesora CURL_STATICLIB we własnym projekcie
  • z biblioteką statyczną, będziesz w tym artykule omówimy, w jaki sposób libcurl działa.]}
  • możesz nie chcieć polegać na LDAP , W takim przypadku możesz go wyłączyć, ustawiając preprocesor CURL_DISABLE_LDAP przed kompilujesz libcurl.
 3
Author: vtellier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-26 11:37:32

Jeśli budujesz z Visual Studio IDE i otrzymujesz 58 dziwnych ostrzeżeń jako podobne

" niespójne połączenie dll curl_global_init /curl_msnprintf/..."

Powinieneś dodać CURL_STATICLIB do definicji preprocesora.

Więc cała linia definicji powinna wyglądać następująco:

USE_SSLEAY; USE_OPENSSL;CURL_STATICLIB.

Z tym wszystkie ostrzeżenia znikną.

Niektórzy zignorowaliby ostrzeżenia i kontynuowali korzystanie z libs, ale wtedy otrzymaliby odpowiednie * błąd * s jak curl_global_init / curl_msnprintf. To może być bardzo irytujące.

Mam nadzieję, że może komuś pomóc.

 2
Author: Hackle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-16 08:05:02
\ fatal error C1083: Cannot open include
file: 'stdlib.h': No such file or directory
NMAKE: fatal error U1077::return code 

Ten błąd można rozwiązać wykonując vcvarsall.nietoperz w Visual Studio.

 2
Author: jayaanand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-17 15:12:39

Zrobiłem " do_nt.bat " Dla windows 7 rc7100 nie zapomnij "nmake-F ms \ nt.mak install " aby poprawnie skopiować Nagłówki

Thanks this did help a lot

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-09 06:08:57

Kilka uwag w odpowiedzi na i / lub dodatkowo do powyższego..

Po pierwsze, jeśli nie chcesz zadzierać z ActivePerl, truskawkowy Perl jest wspaniały i doskonale się do tego nadaje.

Drugi, zamiast do_ms .bat, polecam wybrać do_masm jeśli to możliwe, ponieważ, zgodnie z INSTALL.W32,

Warto to zrobić, bo będzie skutkować szybszym kodem: np. to zazwyczaj skutkuje 2 razy speedup w procedury RSA.

Również zbudowanie 0.9.8 l (L) OpenSSL było koszmarem, więc w końcu zrezygnowałem i wróciłem do 0.9.8 k, który zbudował i połączył (statycznie) z libcurl 1.9 bez problemu.

 1
Author: hemp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-19 22:14:39

Jak zbudować libcurl C / C++ z OpenSSL (obsługa SSL) w systemie Windows]}

  1. zainstaluj libcurl
  2. Zainstaluj OpenSSl
  3. Zbuduj libcurl z OpenSSL

Instalowanie libcurl

Przejdź do strony pobierania libcurl i nie pobieraj pliku ZIP w archiwum źródłowe. W moim przypadku nazywa się to curl-7.58.0.zip

Rozpakuj archiwum i otwórz projects/Windows/VC15/curl_all.sln za pomocą programu Visual Studio.

Instalowanie OpenSSL

Pobierz plik binarny OpenSSL Dla windows. W moim przypadku pobrałem plik Instalatora windowsWin32 OpenSSL v1.1.0g z dystrybucji Shining Light Productions.

folder instalacyjny dla mnie to C:\OpenSSL-Win32.

Budowanie libcurla za pomocą OpenSSL

W pliku rozwiązania Visual Studio zmień konfigurację kompilacji na DLL Debug - DLL OpenSSL.

W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt curl i przejdź do Właściwości.

Pod Linker -> General zmodyfikuj Additional Library Directories i dodaj ścieżkę do swojego OpenSSL directory + \lib. W moim przypadku jest to C:\OpenSSL-Win32\lib.

Zastosuj i zamknij okno właściwości.

Kliknij prawym przyciskiem myszy projekt libcurl i zrób to samo, co w poprzednim kroku, dodaj OpenSSL directory + \lib do Additional Library Directories Pod Linker -> General.

Pod C/C++ -> General, dodaj C:\OpenSSL-Win32\include do Additional Include Directories.

Na koniec przejdź do Linker -> Input i zmodyfikuj Additional Dependencies. Zamień wszystkie pliki lib na następujące:

ws2_32.lib
wldap32.lib
openssl.lib
libssl.lib
libcrypto.lib

Zastosuj i zamknij właściwości okno.

Po wybraniu konfiguracji DLL Debug - DLL OpenSSL build przejdź do Build -> Build Solution.

Skopiuj dwa pliki dll libcrypto-1_1.dll i libssl-1_1.dll z katalogu bin OpenSSL (C:\OpenSSL-Win32\bin) do właśnie utworzonego katalogu budowania curl-7.58.0\build\Win32\VC15\DLL Debug - DLL OpenSSL.

Walidacja Budowy

Wewnątrz katalogu budowania Uruchom curld.exe. Jeśli działa bez błędów (brak dll, itd.) wtedy twoja budowa zakończyła się sukcesem.

 1
Author: Acidic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-09 07:42:33