libcurl是一个比较好的C语言的网络库,目前由于工作需要使用过里面的http以及https部分的功能,以及加载openssl部分的功能,以及ssl连接的功能。现在介绍一下libcurl的一些基本用法。
一、libcurl的下载与编译
下载地址:点击下载,下载最新的源码,解压
(1)windows下的编译
找到解压目录下的curl-7.50.1 \ projects \ Windows \ 下面有更个版本的VS的工程,9对应vs2008,vc10对应vs2010,找到对应的用VS打开,工程已经配置好了直接编译即可,生成的库文件位于curl-7.50.1 \ build \ Win32下面
如果需要支持openssl,需要将编译好的openssl的头文件和库文件按照libcurl的指定的目录结构放好,具体的目录结构可以根据工程的设置找到。
(2)linux下的编译
linux下的编译稍微复杂一点,主要的编译命令:
./configure --prefix=/mnt/svn/linux --without-ssl --without-zlib --without-librtmp --disable-ldap --disable-ldaps --disable-rtsp --disable-rtmp
--disable-verbose --disable-debug
prefix是生成库文件目录的路径,如果不指定,就会生成在默认目录里面,后面具体的都是一些功能的开关,可以使用./configure --help; 查看相关的说明;
(3)arm linux下的编译
arm linux下的编译鱼linux下的编译不同的是需要指定编译器的类型和路径,具体指令参见如下
./configure --prefix=/home/Huangrenwei/svn/his3521 --without-zlib --without-librtmp --disable-ldap --disable-ldaps --disable-rtsp --disable-rtmp
--disable-verbose --disable-debug --host=arm-linux CC=/opt/hisi-linux-nptl/arm-hisiv100-linux/bin/arm-hisiv100-linux-uclibcgnueabi-gcc
此处以his3521的编译器为例子,通过 --host指定编译器类型为arm-linux 通过CC指定编译器的具体位置二、libcurl支持openssl的功能
libcurl本身不支持https与openssl的功能,若要支持该功能,必须将第三方的OPENSSL库文件编译进去,此处采用的是openssl-1.0.2h版本,低版本的openssl可能存在heart
bleed的漏洞。具体的openssl的编译将在另外的文章中介绍,此处直接使用编译好的库文件。
(1).Windows下的编译
openssl编译完成的目录结构如下图:
头文件在include文件夹中,lib和dll在bin文件夹中,打开libcurl的工程,设置好相关的编译选项,设置好头文件和库文件的路径,编译即可得到相关的库文件。
(2)linux下的编译
经过尝试发现,一起有四种链接方式:
libcurl.a -- (libcrypto.a libssl.a)
libcurl.so -- (libcrypto.a libssl.a)
libcurl.a -- (libcrypto.so libssl.so)
libcurl.so -- (libcrypto.so libssl.so)
但是最终只有2和4两种链接方式在做进一步开发和相关的库调用时不会出现符号链接的错误提示,其他的均会报错,具体的原因需要深入了解linux库的编译和连接原理。
libcurl的编译指令:
1).动态链接opesnssl库
--disable-rtmp --disable-verbose
--disable-debug
prefix是生成库文件目录的路径,如果不指定,就会生成在默认目录里面,后面具体的都是一些功能的开关,可以使用./configure
--help 查看相关的说明,--with-ssl指明了openssl的文件的路径,
直接将linux下编译成功的openssl文件夹的路径填写即可,无需改动。
2).静态链接openssl库
LIBS="-ldl"./configure --prefix=/mnt/svn/linux --with-ssl=/home/Huangrenwei/svn/openssl --without-zlib --without-librtmp --disable-ldap
--disable-ldaps --disable-rtsp --disable-rtmp
--disable-verbose
--disable-debug
注意:此处静态链接openssl的库文件的时候需要特殊设置,并且编译的openssl的库必须只能生成静态库的方式,不能同时生成静态和动态库
(3)arm linux下的编译
仍然很上面一样,arm下的编译需要指定编译器路径
1).动态链接opesnssl库
./configure --prefix=/home/Huangrenwei/svn/his3521
--with-ssl=/home/Huangrenwei/svn/his3521d --without-zlib --without-librtmp --disable-ldap --disable-ldaps --disable-rtsp
--disable-rtmp --disable-verbose --disable-debug --host=arm-linux CC=/opt/hisi-linux-nptl/arm-hisiv100-linux/bin/arm-hisiv100-linux-uclibcgnueabi-gcc
2).静态链接openssl库
LIBS="-ldl" ./configure
--prefix=/home/Huangrenwei/svn/his3521 --with-ssl=/home/Huangrenwei/svn/his3521d --without-zlib --without-librtmp --disable-ldap --disable-ldaps
--disable-rtsp --disable-rtmp --disable-verbose
--disable-debug --host=arm-linux CC=/opt/hisi-linux-nptl/arm-hisiv100-linux/bin/arm-hisiv100-linux-uclibcgnueabi-gcc
最终编译成功之后,静态方式将出现一个.so文件,一个.a文件,libcurl.so和libcurl.a,但是只能使用.so文件;动态方式将出现3个so文件,libcrypto.so,libssl.so,libcurl.so。