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?
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.
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, iif( vinfo->features & CURL_VERSION_SSL )
okazał się prawdziwy.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.
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.
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
- Pobierz tam źródło libcurl: https://curl.haxx.se/download.html
- rozpakuj plik i przejdź do folderu
curl-7.57.0\projects
- 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
- Otwórz projekt Visual Studio
curl-7.57.0\projects\Windows\VC14\curl-all.sln
- pamiętaj, aby ustawić projekt visual studio na potrzebną konfigurację kompilacji (
LIB Release - LIB OpenSSL
w moim przypadku) - Zbuduj wszystko
- 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.
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.
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.
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
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.
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]}
- zainstaluj libcurl
- Zainstaluj OpenSSl
- 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.
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