Windowsでhttpsにアクセス可能なlibcurl静的ライブラリプロシージャをコンパイルする

12573 ワード

1.まずopenssl静的ライブラリをコンパイルする
プロセス全体でvs 2015コマンドプロンプトツールを使用しています
perlダウンロードアドレスをインストールする必要があります:リンクの説明を追加して解凍した後、openssl-1.0.2 eディレクトリの下にdevelopというフォルダを作成し、cdをopenssl-1.0にします.2 eディレクトリの下で、
a.コンパイルファイルとモード実行の構成
perl Configure VC-WIN32 no-asm --prefix=E:\curl\openssl-1.0.2e\develop

VC-WIN 32はwindows 32ビットオペレーティングシステムを識別し、64ビットはVC-WIN 64 Aで表し、debugバージョンを使用するにはdebug-VC-WIN 64 Aまたはdebug-VC-WIN 32 no-asmを使用してアセンブリしないことを示す-prefix=E:curlopenssl-1.0.2 edevelopはインストールディレクトリbを設定するコンパイルプロファイルを生成Windows 64ビットシステムであれば実行
ms\do_win64a.bat

Windows 32ビットシステムの場合、
ms\do_ms.bat

このステップを実行するとmsディレクトリの下でntが生成される.makとntdll.mak 2つのコンパイルプロファイルnt.makは静的libライブラリntdllを生成するために用いる.makは動的dllライブラリcを生成するために使用される.静的ライブラリをコンパイルする
nmake -f ms
t.mak

ダイナミックライブラリ
nmake -f ms
tdll.mak

d.静的ライブラリのテスト:
 nmake -f ms
t.mak test

ダイナミックライブラリのテスト:
 nmake -f ms
tdll.mak test

最終的にpassed all testsが表示されると、生成されたライブラリが正しいことを示します.e.静的ライブラリのインストール:
nmake -f ms
t.mak install

ダイナミックライブラリのインストール:
nmake -f ms
tdll.mak install

コンパイルインストールが完了すると、E:curlopenssl-1.0になります.2 edevelopディレクトリの下に生成された関連フォルダfが表示されます.前回のコンパイルで前回の静的ライブラリのコンパイルがクリアされ、再コンパイルされます.
nmake -f ms
t.mak clean

前回のダイナミックライブラリのコンパイルを消去して再コンパイルします.
nmake -f ms
tdll.mak clean

参考:https://blog.csdn.net/mayue_web/article/details/83997969、非常に詳細
2.コンパイルzlib
a.ソースのダウンロードhttp://zlib.net/zlib-1.2.11.tar.gz解凍後、zlibルートディレクトリのコマンドラインでnmake-f win 32/Makefileを実行します.msc
3.libcurlのコンパイル
a.ソースのダウンロードhttp://curl.haxx.se/download/curl-7.46.0.tar.bz2b.必要なopensslとzlib関連ライブラリとヘッダファイルをコピーする.curlソースルートディレクトリの下winbuildディレクトリの下BUILD.WINDOWS.txtのヒントソースコードの同級ディレクトリの下でdepsフォルダを作成するときのディレクトリ構造を下図(偽ディレクトリ)に示す
somedirectory\
|__curl-src
|    |_winbuild
|
|__deps
  |_ lib
  |_ include
  |_ bin

私のところのdepsフォルダディレクトリはE:curldepsがopensslをコンパイルするとき、インストールディレクトリE:curlopenssl-1.0です.2 edevelopincludeの下のopensslクリップをE:curldepsincludeディレクトリの下にコピーします.zlibソースコードのルートディレクトリの下のzconf.h、zlib.hとzutil.h E:curldepsincludeディレクトリにコピーします.E:curlopenssl-1.0.2 edeveloplibディレクトリのlibeay 32.libとssleay.libはE:curldepslibディレクトリにコピーします.zlibソースルートディレクトリの下のzlibをlibはE:curldepslibディレクトリにコピーします.c.libcurlコマンドラインをコンパイルしてソースコードルートディレクトリの下winbuildディレクトリに入る
nmake RTLIBCFG=static /f Makefile.vc mode=static VC=14 WITH_DEVEL=E:\curl\deps WITH_SSL=static ENABLE_SSPI=no ENABLE_IPV6=no DEBUG=no

パラメータの詳細は次のとおりです.
nmake /f Makefile.vc mode= 

where  is one or many of:
  VC=<6,7,8,9,10,11,12,14>     - VC versions
  WITH_DEVEL=            - Paths for the development files (SSL, zlib, etc.)
                                 Defaults to sibbling directory deps: ../deps
                                 Libraries can be fetched at http://windows.php.net/downloads/php-sdk/deps/
                                 Uncompress them into the deps folder.
  WITH_SSL=     - Enable OpenSSL support, DLL or static
  WITH_CARES=   - Enable c-ares support, DLL or static
  WITH_ZLIB=    - Enable zlib support, DLL or static
  WITH_SSH2=    - Enable libSSH2 support, DLL or static
  ENABLE_SSPI=      - Enable SSPI support, defaults to yes
  ENABLE_IPV6=      - Enable IPv6, defaults to yes
  ENABLE_IDN=       - Enable use of Windows IDN APIs, defaults to yes
                                 Requires Windows Vista or later, or installation from:
                                 http://www.microsoft.com/downloads/details.aspx?FamilyID=AD6158D7-DDBA-416A-9109-07607425A815
  ENABLE_WINSSL=    - Enable native Windows SSL support, defaults to yes
  GEN_PDB=          - Generate Program Database (debug symbols for release build)
  DEBUG=            - Debug builds
  MACHINE=         - Target architecture (default is x86)
  
  Static linking of Microsoft's C RunTime (CRT):
==============================================
If you are using mode=static nmake will create and link to the static build of
libcurl but *not* the static CRT. If you must you can force nmake to link in
the static CRT by passing RTLIBCFG=static. Typically you shouldn't use that
option, and nmake will default to the DLL CRT. RTLIBCFG is rarely used and
therefore rarely tested. When passing RTLIBCFG for a configuration that was
already built but not with that option, or if the option was specified
differently, you must destroy the build directory containing the configuration
so that nmake can build it from scratch.

Legacy Windows and SSL
======================
When you build curl using the build files in this directory the default SSL
backend will be WinSSL (Windows SSPI, more specifically Schannel), the native
SSL library that comes with the Windows OS. WinSSL in Windows <= XP is not able
to connect to servers that no longer support the legacy handshakes and
algorithms used by those versions. If you will be using curl in one of those
earlier versions of Windows you should choose another SSL backend like OpenSSL.

3.検証
vs 2015は含むディレクトリを追加し、ライブラリディレクトリを追加し、依存項目を追加した後、プリプロセッサはBUILDING_を追加する.LIBCURL
// staticLibcurlTest.cpp :              。
//

#include "stdafx.h"
#include 
#include 

using namespace std;

/**
*   curl     ,         
* buffer:       
* size:         1
* nmemb:(memory block)             
* userp:          
*/
size_t write_data(void* buffer, size_t size, size_t nmemb, void* userp)
{
     
	static int current_index = 0;

	cout << "current:" << current_index++;
	cout << (char*)buffer;
	cout << "---------------" << endl;

	int temp = *(int*)userp;    //            
	return nmemb;
}

int main()
{
     
	curl_global_init(CURL_GLOBAL_ALL); //        CURL
	CURL* curl = curl_easy_init(); //    CURL  

	if (NULL == curl)
	{
     
		return 0;
	}

	int my_param = 1;    //          

						 //     URL
	curl_easy_setopt(curl, CURLOPT_URL, "https://api.vxxx/gettime");
	//      HTTP              
	curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
	curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
	//        (          )
	curl_easy_setopt(curl, CURLOPT_WRITEDATA, &my_param);
	//     URL  
	CURLcode res = curl_easy_perform(curl);
	//     
	curl_easy_cleanup(curl);
	getchar();
	return 0;
}

参照先:https://blog.csdn.net/fm0517/article/details/91822880 https://blog.csdn.net/huangyimo/article/details/80337496