### libcurl编译-windows-x64
文章时间:2020-11-16
网上找了一堆资料,五花八门,几个文章弄下来才编译过。这里做一个记录,也顺带让想编译curl库的朋友,做个借鉴。
首先编译curl需要 libcurl,openssl,zlib
我放的目录是 cpps/deps下。

自己可以调整自己所需要的目录。
libcurl下载地址:https://curl.se/download.html
openssl下载地址:https://www.openssl.org/source/
zlib下载地址:http://www.zlib.net/
需要安装的软件都知道 perl,python, NASM 其他什么我就不复数,自行百度吧。

我使用的版本号都是目前最新的。
\
\
首先打开VS命令工具 我这里只编译64位。所以选择X64

第一步编译 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"
```
\

编译好后,进入下一步。
\
\
第二步 编译openssl
-
同样进入 openssl目录

输入 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目录里 (需要手动建立)

zlib目录下:zconf.h , zlib.h , zutil.h 拷贝到 deps/deps/include里面
zlib.lib zdll.lib 拷贝到 deps/deps/lib 里

\
开始编译
-
同样进入 curl目录 在进入 winbuild

输入 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
```
编译完成后

有个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

****
- 引言
- 目录
- 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