前言:我發誓,Windows下C++的依賴庫是安裝起來最啰嗦最繁瑣最麻煩的,比Linux下那個make install變態多了,為了防止后人在這上面無限浪費時間和生命,我打算把我在這上面浪費的一天一夜再回顧一下。
需要准備的工具:CMake for Windows 一份;zlib、libcurl、openssl 源代碼各一份。
我使用的版本:CMake 3.4.0、zlib 1.2.8、libcurl 7.45.0、openssl 1.0.2d、VC2015,我編譯的全是靜態庫。
首先,編譯zlib,打開CMake,把zlib目錄下的CMakeList.txt拖進去,然后生成解決方案。注意,這一步千萬不要用 contrib\vstudio 下的 sln,里面的坑無限多,打開vs,編譯zlib靜態庫。
然后,編譯OpenSSL,需要裝一個perl,32位的,接着切換進OpenSSL源碼的目錄,這里我也遇到一個坑,高版本的VS的MASM有問題,所以要禁用掉ASM代碼才能編譯通過:
perl Configure VC-WIN32 no-asm --prefix:你想把庫裝到哪個目錄
ms\do_nasm
nmake -f ms\nt.mak -a
nmake -f ms\nt.mak install(這里一定要注意install,不然OpenSSL那個頭文件內容是一堆垃圾)
接着,開始編譯libcurl:
CMake 打開 libcurl 的 CMakeList.txt。
Add Entry:
ZLIB_INCLUDE_DIR D:/developer/include/zlib
ZLIB_LIBRARIES D:/developer/library/zlib
OPENSSL_INCLUDE_DIR D:/developer/include
OPENSSL_LIBRARIES D:/developer/library/openssl
Configure,這里還有一個CMake的大坑。第一次Configure后,把Advanced勾上。
SSL_EAY_RELEASE設置為 D:/developer/library/openssl/ssleay32.lib
LIB_EAY_RELEASE設置為 D:/developer/library/openssl/libeay32.lib
還有設置ZLIB里面的內容,注意,如果不勾選Advanced,你設置的ZLIB選項是無效的(天坑啊!)。
補充: 另外這里還有一個地方需要注意一下,Configure時,你要么用OpenSSL,要么可以用Windows SSPI,如果你用OpenSSL,在用CMake生成CURL的解決方案時,要把CURL_WINDOWS_SSPI這個選項的鈎給去掉(要出現這個選項,需要勾選CMake的Advanced),否則會出現結構重定義的問題,如果你不使用OpenSSL,不傳OPENSSL_INCLUDE和OPENSSL_LIBRARIES進去就好,然后把CMake里那個CMAKE_USE_OPENSSL的鈎取消掉,不過前提是你是在編譯Windows用的libcurl。
到這里就結束了,再次Configure,生成curl解決方案后,就開vs狂編譯吧。
如果您按照我的方法編譯成功了,希望您能留下一條評論,我會得到巨大的鼓勵。