libCURL開源庫在VS2010環境下編譯安裝,配置詳解


libCURL開源庫在VS2010環境下編譯安裝,配置詳解

轉自:http://my.oschina.net/u/1420791/blog/198247

    http://blog.csdn.net/sunnyleevip/article/details/41038559

文章一:CURL開源庫VS2010環境下編譯安裝,配置詳解

 

一 准備

1.1 CURL官網下載地址:http://curl.haxx.se/download.html

1.2 找到源碼包,我這里下載的是7.32.0版:http://curl.haxx.se/download/curl-7.32.0.zip

二 步驟

2.1

打開curl-7.32.0\vs\vc8\lib\vc8libcurl.vcproj文件,VS會提示升級工程,下一步即可

VC工程里有些設置問題導致不能直接編譯,需要稍作修改

2.2

打開工程屬性 > C\C++ > 常規 > 附加包含目錄。這里的包含目錄是"..\include",而這個目錄根本就不存在,它應該指

向"curl-7.32.0\include"才對,所以把這里改成"..\..\..\include"。(或者直接完整路徑也可以)

 

2.3打開工程屬性 > C\C++ > 預處理器 > 預處理器定義。這里有個默認宏"BUILDING_LIBCURL",把它改

成"CURL_STATICLIB"。這樣,那些接口函數就不會被聲明為導出函數了。

 

2.4打開工程屬性 > C\C++ > 庫管理器 > 常規 > 附加依賴項。添加ws2_32.lib和wldap32.lib,這是CURL必須依賴的。


2.5.把"libcurl.rc"從工程中移除,它只是版本信息,只會增大文件,去掉!(無所謂)


2.6 可編譯出如下版本,根據需要手動設置編譯

libcurld.lib //debug      Multi-threaded (/MT)
 
libcurl.dll  //release    Multi-threaded Debug (/MTd)

//以上為靜態庫版本,生成exe體積大,包含庫。

生成兩種版本的均可。但是連接使用的時候注意對應版本。


libcurld.lib //debug     Multi-threaded DLL Debug (/MDD)
 
libcurl.dll //release    Multi-threaded DLL (MD)

//以上為動態庫版本,生成exe體積小,不包含庫。

2.7 然后將其分別放入自己創建一個debug和一個release文件夾內、

    例如debug/libcurl.lib release//libcurl.lib
        debug/libcurl.dll release//libcurl.dll
 注意將其放入C:\curl-7.32.0\curl-7.32.0\lib\目錄里面
(可以自定義,只要注意后面庫包含時的變量就可以了)

2.8 創建兩個環境變量 

例如 CURL_INC設置為C:\curl-7.32.0\curl-7.32.0\include
例如 CURL_LIB設置為C:\curl-7.32.0\curl-7.32.0\lib



三 結果測試

3.1 然后開始測試如何使用。
   
為了測試lib文件,新建一個控制台程序,

打開工程屬性 > C\C++ > 常規 >包含頭文件$(CURL_INC)
打開工程屬性 > C\C++ > 常規 >包含庫文件$(CURL_LIB)\debug
(此處注意debug和release不同,以免影響后期工程調試)
3.2 

打開工程屬性 > C\C++ > 預處理器 > 預處理器定義。添加"CURL_STATICLIB"。

 

這樣,那些接口函數就不會被聲明為導出函數了

3.3 添加依賴庫文件


3.4 找個自帶的例子測試 /docs/examples/simple.c源文件

[cpp] view plaincopyprint?

  1. #include "stdafx.h"  

  2. #include <stdio.h>  

  3. #include <curl/curl.h>    

  4.   

  5. #pragma comment(lib,"libcurl.lib")  

  6.   

  7. int _tmain(int argc, _TCHAR* argv[])  

  8. {  

  9.     CURL *curl;  

  10.     CURLcode res;  

  11.   

  12.     curl = curl_easy_init();  

  13.     if(curl) {  

  14.         curl_easy_setopt(curl, CURLOPT_URL, "http://www.baidu.com");  

  15.         /* example.com is redirected, so we tell libcurl to follow redirection */  

  16.         curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);  

  17.   

  18.         /* Perform the request, res will get the return code */  

  19.         res = curl_easy_perform(curl);  

  20.         /* Check for errors */  

  21.         if(res != CURLE_OK)  

  22.             fprintf(stderr, "curl_easy_perform() failed: %s\n",  

  23.             curl_easy_strerror(res));  

  24.   

  25.         /* always cleanup */  

  26.         curl_easy_cleanup(curl);  

  27.     }  

  28.     return 0;  

  29. }  



3.5 實例測試結果

 

 

 

文章二:libcurl在vs2013下C++項目中的編譯連接

現在我的需求是要把libcurl port入自己的程序里。

首先我是參照下面的博客去做的:

http://blog.csdn.net/atceedsun/article/details/40581247

感謝這位作者。

特別說明一下,

1)我現在使用的是7.39.0的版本,在這個版本里已經有vs2012的工程文件了,在vs2013中也直接打開就可以了。

2)同樣的理由7.39.0版本中,工程文件已經有了調整,博客中的2.2不需要再修改。

3)我需要的是dll庫,但是工程默認的設置是編譯出lib庫,如果只是需要lib庫,不需要設置太多,上述博客中的2.3項,在7.39.0版本中默認就是加入了CURL_STATICLIB宏的。

其它東西都按上述博客去做基本都沒問題,最后我還是出現了一個小狀況,引入了libcurl之后,自己的代碼反而編譯出錯了。出現下述的錯誤:

 

[cpp]  view plain copy
 
  1. 3>d:\program files (x86)\microsoft visual studio 12.0\vc\include\xiosbase(116): error C2065: '_SH_DENYNO' : undeclared identifier  
  2. 3>          d:\program files (x86)\microsoft visual studio 12.0\vc\include\xiosbase(201) : see reference to class template instantiation 'std::_Iosb<int>' being compiled  


我在網上看到也有別人有同樣的問題,卻沒人給出解決方案,自己也折騰了不少時間。這樣的情況我覺得很容易出現,因為這個頭文件會被很多頭文件所包含,比如iostream。

 

我看了一下xiosbase.h頭文件,發現這個116行定義的東西在一個叫share.h的頭文件中,然后很不巧的是,libcurl里面也有一個叫share.h的文件,於是,xiosbase.h先調用了libcurl中的頭文件而沒有去用系統的頭文件,這就跟程序搜索頭文件路徑的順序相關了。

所以呢,最終我就把系統的頭文件路徑放在最前面,讓編譯時先找系統的頭文件,編譯就通過了。

終於可以繼續寫代碼了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM