您的位置:首页 > 运维架构

编译 libcurl 7.45.0 + zlib 1.2.8 + openssl 1.0.2d

2015-11-19 03:13 381 查看
前言:我发誓,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狂编译吧。

  如果您按照我的方法编译成功了,希望您能留下一条评论,我会得到巨大的鼓励。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: