1.安装curl wget http://curl.haxx.se/download/curl-7.26.0.tar.gz
tar -zxvf curl-7.26.0.tar.gz
cd curl-7.26.0
./configure --prefix=/usr/local/curl
make
make install
这里需要root权限
cd curl-7.26.0
./configure --prefix=/usr/local/curl
make
make install
这里需要root权限
2.查看当前已安装的curl版本
curl -V
3.如果当前系统已经安装旧版本的curl而不想覆盖,或者没有root权限,可将curl安装到本地目录,即:修改prefix=后面的路径为:/home/目标目录。查看本地目录的版本需要进入目标目录中的bin下,然后执行./curl -V。
4.在函数中调用curl并编译的时候,默认将使用系统中已安装的curl,如果想要使用本地目录中的,需要进行头文件和库文件的目录设置,其中:设置头文件为-I,设置库文件为-L,比如:
g++ test.cpp -lcurl -I /home/目标目录/include/ -L /home/目标目录/lib/
5.可将自己的程序和curl一起编译成静态库/动态库,供其他程序使用:
(1)生成静态库:
ar rcs libmylib.a mylib.o
(2)静态库的使用:
gcc -o test test.c -lmylib
(注:系统约定静态库以lib开头,以.a结尾,而动态库以.so结尾,因而编译的时候不需要带上前缀和后缀。)
(3)生成动态库:
gcc -fPIC -o mylib.o -c mylib.c
gcc -shared -o libttt.so mylib.o
或者只执行一条语句
gcc -fPIC -shared -o libttt.so mylib.c
(4)动态库的使用:
gcc -o test test.c /usr/lib/libttt.so
(注:引用动态库时,必须含有路径,如果只是使用libttt.so,则必须确保这个库所在目录包括在PATH 环境变量中。)
6.调用编译好的curl库,运行程序的时候,可能会提示下面错误信息:
error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or directory
这种情况一般是由于没有root权限进行安装,因而默认的库查找目录下没有相应文件。
解决办法:
(1)使用root权限进行安装。
(2)设置LD_LIBRARY_PATH=dir(dir为libcurl.so.4的目录),例如:export LD_LIBRARY_PATH=/home/lib,可通过echo $LD_LIBRARY_PATH检查设置是否成功,此项设置在shell的当前会话中全局生效。
(3)多个文章中提到可以使用gcc的-R或-rpath选项来在编译时就指定库的查找路径,并且该库的路径信息保存在可执行文件中,运行时它会直接到该路径查找库,避免了使用LD_LIBRARY_PATH环境变量查找,但是我所使用的系统中似乎不支持该选项。
g++编译的时候使用-lcrypto -lidn -lssl -lrt /usr/lib/libcurl.a(意思是:前面四个使用动态链接,后面一个使用静态链接),假设g++生成的可执行程序名为CurlTest,则执行该语句:ldd CurlTest
curl -V
3.如果当前系统已经安装旧版本的curl而不想覆盖,或者没有root权限,可将curl安装到本地目录,即:修改prefix=后面的路径为:/home/目标目录。查看本地目录的版本需要进入目标目录中的bin下,然后执行./curl -V。
4.在函数中调用curl并编译的时候,默认将使用系统中已安装的curl,如果想要使用本地目录中的,需要进行头文件和库文件的目录设置,其中:设置头文件为-I,设置库文件为-L,比如:
g++ test.cpp -lcurl -I /home/目标目录/include/ -L /home/目标目录/lib/
5.可将自己的程序和curl一起编译成静态库/动态库,供其他程序使用:
(1)生成静态库:
ar rcs libmylib.a mylib.o
(2)静态库的使用:
gcc -o test test.c -lmylib
(注:系统约定静态库以lib开头,以.a结尾,而动态库以.so结尾,因而编译的时候不需要带上前缀和后缀。)
(3)生成动态库:
gcc -fPIC -o mylib.o -c mylib.c
gcc -shared -o libttt.so mylib.o
或者只执行一条语句
gcc -fPIC -shared -o libttt.so mylib.c
(4)动态库的使用:
gcc -o test test.c /usr/lib/libttt.so
(注:引用动态库时,必须含有路径,如果只是使用libttt.so,则必须确保这个库所在目录包括在PATH 环境变量中。)
6.调用编译好的curl库,运行程序的时候,可能会提示下面错误信息:
error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or directory
这种情况一般是由于没有root权限进行安装,因而默认的库查找目录下没有相应文件。
解决办法:
(1)使用root权限进行安装。
(2)设置LD_LIBRARY_PATH=dir(dir为libcurl.so.4的目录),例如:export LD_LIBRARY_PATH=/home/lib,可通过echo $LD_LIBRARY_PATH检查设置是否成功,此项设置在shell的当前会话中全局生效。
(3)多个文章中提到可以使用gcc的-R或-rpath选项来在编译时就指定库的查找路径,并且该库的路径信息保存在可执行文件中,运行时它会直接到该路径查找库,避免了使用LD_LIBRARY_PATH环境变量查找,但是我所使用的系统中似乎不支持该选项。
g++编译的时候使用-lcrypto -lidn -lssl -lrt /usr/lib/libcurl.a(意思是:前面四个使用动态链接,后面一个使用静态链接),假设g++生成的可执行程序名为CurlTest,则执行该语句:ldd CurlTest
如果仍然失败的话,可重新编译安装libcurl,执行步骤1,但是在./configure的执行语句中需要添加:--disable-ldap --disable-ldaps,编译好之后再进行链接即可。