### libcurl编译-windows-x64
文章时间:2020-11-16
网上找了一堆资料,五花八门,几个文章弄下来才编译过。这里做一个记录,也顺带让想编译curl库的朋友,做个借鉴。
首先编译curl需要 libcurl,openssl,zlib
我放的目录是 cpps/deps下。
![](https://img.kancloud.cn/34/d9/34d93218a1fd9e5e99324874f2b5caa4_394x221.png)
自己可以调整自己所需要的目录。
libcurl下载地址:https://curl.se/download.html
openssl下载地址:https://www.openssl.org/source/
zlib下载地址:http://www.zlib.net/
需要安装的软件都知道 perl,python, NASM 其他什么我就不复数,自行百度吧。
![](https://img.kancloud.cn/a6/0b/a60b37f2c97639d98b1fb16f0e12a52d_238x124.png)
我使用的版本号都是目前最新的。
\
\
首先打开VS命令工具 我这里只编译64位。所以选择X64
![](https://img.kancloud.cn/6e/c3/6ec3a2974da468f3f84463f901699032_278x394.png)
第一步编译 zlib
-
进入到zlib 目录
\
输入 X64
```
nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -I." OBJA="inffasx64.obj gvmat64.obj inffas8664.obj"
```
X86
```
nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="inffas32.obj match686.obj"
```
\
![](https://img.kancloud.cn/28/79/287972649004038672d0497027edff12_993x519.png)
编译好后,进入下一步。
\
\
第二步 编译openssl
-
同样进入 openssl目录
![](https://img.kancloud.cn/a4/be/a4be02393d03cc02be78e0a1d5b77154_993x519.png)
输入 X64
```
perl Configure VC-WIN64A --prefix=D:\work\code\apiserver\cpps\deps\openssl-1.1.1h\build no-asm
nmake
nmake install
```
X86
```
perl Configure VC-WIN32 --prefix=D:\work\code\apiserver\cpps\deps\openssl-1.1.1h\build no-asm
nmake
nmake install
```
最后可能会有错误,提示找不到什么文件,无所谓忽视他。
确定文件夹里面多了一个 build文件夹就可以了 (--prefix= 地址\build)我用的地址+build文件夹 所以是build 换其他文件夹就是其他文件夹名
编译好,下一步。
\
\
第三步 编译libcurl
-
编译好 zlib 与 openssl 后,这里需要把头文件和lib文件分别拷贝到相应目录
openssl目录下:build的include与lib 拷贝到 deps/deps目录里 (需要手动建立)
![](https://img.kancloud.cn/85/52/85520104b67924a1a9f9db53f1757fc3_500x208.png)
zlib目录下:zconf.h , zlib.h , zutil.h 拷贝到 deps/deps/include里面
zlib.lib zdll.lib 拷贝到 deps/deps/lib 里
![](https://img.kancloud.cn/58/52/585229b0b174a330a24fbc3a4a8085b6_599x226.png)
\
开始编译
-
同样进入 curl目录 在进入 winbuild
![](https://img.kancloud.cn/9c/9e/9c9edfc5afb04c1682ca7e94a4142131_993x519.png)
输入 X64
```
cd winbuild
nmake /f Makefile.vc mode=dll MACHINE=x64 VC=15 ENABLE_IPV6=yes WITH_SSL=dll WITH_ZLIB=dll DEBUG=no
```
X86
```
cd winbuild
nmake /f Makefile.vc mode=dll VC=15 WITH_SSL=dll ENABLE_IPV6=yes WITH_ZLIB=dll DEBUG=no
```
编译完成后
![](https://img.kancloud.cn/be/ed/beed0474afd27bdfd90eab6f26447151_630x243.png)
有个builds文件夹
进入 libcurl-vc15-x64-release-dll-ssl-dll-zlib-dll-ipv6-sspi
分别把include 与 lib拷贝到 deps/deps里面
\
**使用libcurl记得添加宏定义:BUILDING\_LIBCURL;**
(curl我已经添加好了)
\
至此编译结束。 就可以开始编译 demo/curl 啦。
尾语: 我觉得编译就是干货,网上的文章乱七八糟的。 最后说下 dll 部分 openssl 和 libcurl 都生成了 bin目录 自己拷贝下dll就好了。zlib在根目录有个zlib1.dll
![](https://img.kancloud.cn/c7/2a/c72a96a69b3ae0ed7c2850c9a5592508_190x109.png)
****
- 引言
- 目录
- Get Started
- libcurl编译-windows-x64-opensll-zlib
- 基础语法
- if&else
- for&foreach
- while
- function
- 变量
- new
- class
- lambda
- ..字符串拼接
- import
- base
- printf
- printfln
- println
- exit
- sleep&Sleep
- tonumber
- toint
- system
- SetConsoleTitle
- dostring
- dofile
- assert
- _VERSION
- loadlibrary
- freelibrary
- math
- abs
- srand
- rand
- random
- acos
- asin
- atan
- ceil
- cos
- exp
- floor
- fmod
- huge
- log
- max
- maxinteger
- min
- mininteger
- pi
- sin
- sqrt
- tan
- io
- getc
- fopen
- fsize
- fread
- fwrite
- fseek
- fclose
- fflush
- remove
- rename
- getfileext
- getfilepath
- getfilename
- getfilenamenotext
- mkdir
- time
- gettime
- gettimestr
- maketime
- gettickcount
- time2str
- str2time
- issomeday
- getyear
- getmon
- getday
- gethour
- getmin
- getsec
- getyday
- addmonths
- adddays
- addyears
- addweeks
- addhours
- addminutes
- addseconds
- strftime
- string
- find
- rfind
- length
- strlen
- replace
- split
- strcut
- empty
- substr
- npos
- at
- format
- GC
- Collect
- CollectAll
- debug
- open
- close
- breakpoint
- Buffer类
- read
- write
- tostring
- tointerger
- tonumber
- readInt8
- readInt16
- readInt32
- readInt
- readNumber
- readString
- readBool
- writeInt8
- writeInt16
- writeInt32
- writeInt
- writeNumber
- writeString
- writeBool
- seek
- length
- vector类
- push_back
- push_front
- pop_back
- pop_front
- insert
- at
- erase
- pop
- begin
- end
- next
- it
- resize
- clear
- size
- map类
- insert
- find
- erase
- clear
- size
- unordered_map类
- insert
- find
- erase
- pop
- begin
- end
- next
- it
- key
- clear
- size
- 支持库-模块
- json
- Get Started
- encode
- encodeT
- decode
- curl
- Get Started
- CURL
- getdata
- getheader
- append
- curl_easy_init
- curl_easy_cleanup
- curl_easy_setopt
- curl_easy_getinfo
- curl_easy_perform
- curl_version
- socket
- server
- setoption
- listen
- run
- send
- closesocket
- stop
- isrunning
- client
- setoption
- run
- connect
- send
- isconnect
- closesocket
- httpserver
- setoption
- listen
- run
- register_handlefunc
- register_controller
- register_controller_default
- stop
- isrunning
- httpserver_request
- addheader
- append
- send
- getparam
- getheader
- geturi
- getpath
- getbuffer
- ServerOption
- ClientOption
- HttpServerOption
- http
- httprequest
- setcookiesfile
- setproxy
- setproxyaccount
- addheaders
- post
- get
- call
- getcookies
- getheaders
- settimeout
- followlocation
- encoding
- encode
- UTF8
- GBK
- hashlib
- md5
- sha1
- sha224
- sha256
- sha384
- sha512
- mysql
- connect
- mysql类
- call
- execute
- error
- isconnect
- clear
- close
- mysql_result
- records
- mysql_record
- fields
- get
- base64
- encode
- decode