libcurl第二課 編譯靜態庫

1 編譯libcurl靜態庫
    確保C/C++頁面下代碼生成/運行庫確保跟解決方案保持一致,確保常規下輸出路徑和目標文件名稱(d)
2 C/C++屬性頁面中的預處理器屬性頁設置定義
_DEBUG
BUILDING_LIBCURL
DEBUGBUILD
CURL_STATICLIB
HTTP_ONLY
USE_WINDOWS_SSPI
USE_SCHANNEL
USE_WINDOWS_SSPI和USE_SCHANNEL兩個預編譯處理定義是用來定義HTTPS,爲了使用https協議須要指定,切記!curl


2 連接錯誤分析
1)error LNK2019: 沒法解析的外部符號 __imp__curl_easy_init,該符號在函數 _main 中被引用
分析:不定義CURL_STATICLIB 編譯結果,由於CURL_EXTERN CURL *curl_easy_init(void);函數以前有CURL_EXTERN定義,而該定義在
#if (defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__)) && \
     !defined(CURL_STATICLIB)
#if defined(BUILDING_LIBCURL)
#define CURL_EXTERN  __declspec(dllexport)
#else
#define CURL_EXTERN  __declspec(dllimport)
#endif
#else
這裏被定義,若是沒有定義CURL_STATICLIB,將會致使CURL_EXTERN被替換成__declspec(dllexport)或者__declspec(dllimport),這兩個聲明只應用於動態連接,不能應用於靜態連接ide

2)error LNK2019: 沒法解析的外部符號 __imp__ldap_init,該符號在函數 __ldap_free_urldesc 中被引用
在引用項目的屬性中添加額外的靜態庫Crypt32.lib,Wldap32.lib,不然出現以下的錯誤,由於用到https函數

修訂:
2019/7/20 理解在預編譯頭定義CURL_STATICLIB的意義url

相關文章
相關標籤/搜索