Libcurl安装及编译

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权限
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
  如果仍然失败的话,可重新编译安装libcurl,执行步骤1,但是在./configure的执行语句中需要添加:--disable-ldap --disable-ldaps,编译好之后再进行链接即可。
上一篇:PHP技术开发微信公众平台


下一篇:Zabbix集成OneAlert实现短信、邮件、微信、电话、App告警