天天看點

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

作者:弘毅軟體技術

文章一: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"。

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

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

3.3 添加依賴庫檔案

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

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

[cpp] view plaincopyprint?

  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <curl/curl.h>
  4. #pragma comment(lib,"libcurl.lib")
  5. int _tmain(int argc, _TCHAR* argv[])
  6. {
  7. CURL *curl;
  8. CURLcode res;
  9. curl = curl_easy_init();
  10. if(curl) {
  11. curl_easy_setopt(curl, CURLOPT_URL, "http://www.baidu.com");
  12. /* example.com is redirected, so we tell libcurl to follow redirection */
  13. curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
  14. /* Perform the request, res will get the return code */
  15. res = curl_easy_perform(curl);
  16. /* Check for errors */
  17. if(res != CURLE_OK)
  18. fprintf(stderr, "curl_easy_perform() failed: %s\n",
  19. curl_easy_strerror(res));
  20. /* always cleanup */
  21. curl_easy_cleanup(curl);
  22. }
  23. return 0;
  24. }

3.5 執行個體測試結果

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

文章二: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之後,自己的代碼反而編譯出錯了。出現下述的錯誤:

  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中的頭檔案而沒有去用系統的頭檔案,這就跟程式搜尋頭檔案路徑的順序相關了。

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

終于可以繼續寫代碼了。

繼續閱讀