天天看點

Windows10+vs2013+openssl+x64生成libcurl庫

libcurl庫是目前在c++中進行http網絡傳輸的一個通用庫,除其本身支援http協定以外,其還提供了選項,使得将其與openssl庫一起進行編譯後,出來的libcurl庫可以進一步支援https。除此之外,使用者還可以在編譯時選擇連結zlib, libssh2等庫,以使編譯獲得的庫支援更多功能。具體的參數即完整的編譯方法在libcurl源碼包的winbuild/BUILD.WINDOWS.txt檔案中有說明。

筆者此處選用了openssl+libcurl的編譯方式,以編譯出一個能支援https的libcurl庫。

1. 在官網上下載下傳libcurl庫的源代碼curl-7.60.0, openssl的源代碼openssl-1.0.2o.tar,下載下傳并安裝編譯openssl的perl工具

2. 點選:開始——>Visual Studio Tools(開啟了相關檔案夾)——>使用"管理者方式"打開VS2013 x64 Native Tools Command Prompt,在其中cd進入openssl的解壓檔案夾中,運作指令,生成openssl庫

vcvarsall.bat x64
perl Configure VC-WIN64A no-asm –-prefix=d:\openssl-x64
ms\do_win64a.bat
nmake /f ms\nt.mak
nmake /f ms\nt.mak install
           

指令解釋:運作VC的設定環境指令,設定預設編譯方式為64(若預設路徑中找不到此.bat可切換到vs中相應路徑中,運作後再切換回來即可);設定perl的編譯參數和路徑;openssl的編譯;

注意:在進行openssl編譯時,應當保證在一個完全幹淨的、新解壓出來的openssl檔案夾中進行,否則,若在一個以前進行過其他操作(比如錯誤的編譯指令)的檔案夾中進行,即使運作了正确的編譯指令,也可能會出現錯誤。

注意:若要生成DEBUG版本,則需先修改ms\do_win64a.bat,修改其中相應兩句如下:

perl util\mk1mf.pl debug VC-WIN64A >ms\nt.mak
perl util\mk1mf.pl debug dll VC-WIN64A >ms\ntdll.mak
           

3. 将産生的openssl庫的檔案夾改名為deps,将其放在與libcurl的源代碼根目錄同級的目錄,進入winbuild檔案夾,參考其中的BUILD.WINDOWS.txt檔案中的說明,進行相關設定,運作指令,即可成功生成libcurl庫

cd curl-src\winbuild
nmake /f Makefile.vc mode=static VC=12 WITH_SSL=static ENABLE_IDN=no MACHINE=x64
           

注意:ENABLE_IDN=no一定要添加上,否則,即使生成了libcurl庫,在其後進行使用時,也會産生連結錯誤

注意:若要生成DEBUG版本,則編譯指令為:

cd curl-src\winbuild
nmake /f Makefile.vc mode=static VC=12 WITH_SSL=static ENABLE_IDN=no MACHINE=x64 DEBUG=yes
           

4. 在其後進行libcurl庫進行使用時,可能會出現一系列連結錯誤:

libcurl_a.lib(ldap.obj):-1: error: LNK2019: unresolved external symbol __imp_ldap_init referenced in function Curl_ldap
           

此時,給程式添加Windows本身的依賴庫:Wldap32.lib即可,此依賴庫系統中可能有多個,可以一個一個試,選擇一個能夠使程式編過的即可,注意使用x64版本的,比如,筆者使用QT,則将Wladap32.lib拷貝出來放到了特定檔案夾中,并.pro檔案中添加了:

LIBS += -L$$quote($$LIBS_PATH\wldap32\build\Release\x64) \
            -lWldap32
           

注:在使用libcurl庫的項目中,應當加上CURL_STATICLIB的宏,否則會出現連結錯誤

此後,編譯、連結應該就可順利通過了。

快使用libcurl庫,愉快地進行網絡程式設計吧!

繼續閱讀