天天看點

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,編譯好之後再進行連結即可。

繼續閱讀