vc2015 編譯libcurl帶openssl


1.先編譯zlib下載地址 http://zlib.net/

我這邊vc2015編譯需要配置環境變量,不知道是裝了wdk的原因還是多個vc版本的原因

設置環境變量lib和include路徑

INCLUDE=C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\shared;C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\ucrt\sys
LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10586.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10586.0\ucrt\x64

然后用vc2015的控制台命令,進入到代碼路徑

nmake -f win32\Makefile.msc clean
nmake -f win32\Makefile.msc

編譯完成后,修改lib路徑為x86路徑,注銷系統,重新執行vc2015的控制台(x86)版本,即可生成對應的dll和lib

如果需要編譯mt版本的,修改Makefile.msc中的CFLAGS  = -nologo -MD -W3 -O2 -Oy- -Zi -Fd"zlib" $(LOC) 中的MD為MT

這編譯出來的是realse版本的,如果debug版本項目使用realse版本zlib的時候,需要將多線程調試 DLL (/MDd)" 改為 "多線程 DLL (/MD)


2.編譯openssl http://www.cnblogs.com/ultracpp/p/3463110.html


3.編譯libcurl
下載地址  https://curl.haxx.se/download.html
編譯主要參考自帶的文檔 winbuild\BUILD.WINDOWS.txt
同樣修改 lib路徑(同上)

同樣使用vc命令行,cd到curl-*\winbuild路徑下配置deps目錄

切換x86的時候直接用x86的lib替換掉就可以了

執行命令如:
nmake /f Makefile.vc mode=dll VC=14 WITH_DEVEL="e:\curl-7.50.0\deps" WITH_SSL=dll WITH_ZLIB=dll DEBUG=no MACHINE=x64
nmake /f Makefile.vc mode=dll VC=14 WITH_DEVEL="e:\curl-7.50.0\deps" WITH_SSL=dll WITH_ZLIB=dll DEBUG=no MACHINE=x86

nmake /f Makefile.vc mode=dll VC=14 WITH_DEVEL="e:\curl-7.50.3\deps" ENABLE_IDN=no WITH_SSL=dll WITH_ZLIB=dll DEBUG=no MACHINE=x64

nmake /f Makefile.vc mode=dll VC=14 WITH_DEVEL="e:\curl-7.50.3\deps" ENABLE_IDN=no WITH_SSL=dll WITH_ZLIB=dll DEBUG=no MACHINE=x86

Enable use of Windows IDN APIs, defaults to yes Requires Windows Vista or later

如果編譯失敗,提示連接錯誤之類的,可以嘗試直接清空builds目錄下面的所有文件,再來一次

如果出現在xp下面運行無法定位程序輸入點GetTickCount64的話,需要自己手動修改MakefileBuild.vc文件,找到
!IF "$(VC)"=="6"
CC_NODEBUG = $(CC) /O2 /DNDEBUG
CC_DEBUG = $(CC) /Od /Gm /Zi /D_DEBUG /GZ
CFLAGS = /I. /I../lib /I../include /nologo /W3 /GX /DWIN32 /YX /FD /c /DBUILDING_LIBCURL
!ELSE
CC_NODEBUG = $(CC) /O2 /DNDEBUG
CC_DEBUG = $(CC) /Od /D_DEBUG /RTC1 /Z7 /LDd /W3
CFLAGS = /I. /I ../lib /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL
!ENDIF
 
修改后面的
CFLAGS = /I. /I ../lib /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL /D_USING_V110_SDK71_
 
找到(后面也增加/D_USING_V110_SDK71_)
CURL_CFLAGS = /I../lib /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /D_USING_V110_SDK71_
CURL_LFLAGS = /nologo /out:$(DIRDIST)\bin\$(PROGRAM_NAME) /subsystem:console,"5.01" /machine:$(MACHINE)

原因看config-win32.h里面的

#  if defined(_USING_V110_SDK71_)
#    define VS2012_DEF_TARGET 0x0501
#  else
#    define VS2012_DEF_TARGET 0x0600
#  endif

編譯完成后會得到builds\libcurl-vc14-x86-release-dll-ssl-dll-zlib-dll-ipv6-sspi目錄,里面的東西就是我們想要的了

 

不過,得到的libcurl好像並沒有導入zlib,盡管上面的命令是動態導入的dll


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM