Windowsでhttpsにアクセス可能なlibcurl静的ライブラリプロシージャをコンパイルする
12573 ワード
1.まずopenssl静的ライブラリをコンパイルする
プロセス全体でvs 2015コマンドプロンプトツールを使用しています
perlダウンロードアドレスをインストールする必要があります:リンクの説明を追加して解凍した後、openssl-1.0.2 eディレクトリの下にdevelopというフォルダを作成し、cdをopenssl-1.0にします.2 eディレクトリの下で、
a.コンパイルファイルとモード実行の構成
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ビットシステムであれば実行
Windows 32ビットシステムの場合、
このステップを実行するとmsディレクトリの下でntが生成される.makとntdll.mak 2つのコンパイルプロファイルnt.makは静的libライブラリntdllを生成するために用いる.makは動的dllライブラリcを生成するために使用される.静的ライブラリをコンパイルする
ダイナミックライブラリ
d.静的ライブラリのテスト:
ダイナミックライブラリのテスト:
最終的にpassed all testsが表示されると、生成されたライブラリが正しいことを示します.e.静的ライブラリのインストール:
ダイナミックライブラリのインストール:
コンパイルインストールが完了すると、E:curlopenssl-1.0になります.2 edevelopディレクトリの下に生成された関連フォルダfが表示されます.前回のコンパイルで前回の静的ライブラリのコンパイルがクリアされ、再コンパイルされます.
前回のダイナミックライブラリのコンパイルを消去して再コンパイルします.
参考:
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フォルダを作成するときのディレクトリ構造を下図(偽ディレクトリ)に示す
私のところの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ディレクトリに入る
パラメータの詳細は次のとおりです.
3.検証
vs 2015は含むディレクトリを追加し、ライブラリディレクトリを追加し、依存項目を追加した後、プリプロセッサはBUILDING_を追加する.LIBCURL
参照先:https://blog.csdn.net/fm0517/article/details/91822880 https://blog.csdn.net/huangyimo/article/details/80337496
プロセス全体で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