溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

libcurl第二課 編譯靜態(tài)庫(kù)

發(fā)布時(shí)間:2020-07-25 17:12:45 來(lái)源:網(wǎng)絡(luò) 閱讀:835 作者:fengyuzaitu 欄目:軟件技術(shù)

1 編譯libcurl靜態(tài)庫(kù)
??? 確保C/C++頁(yè)面下代碼生成/運(yùn)行庫(kù)確保跟解決方案保持一致,確保常規(guī)下輸出路徑和目標(biāo)文件名稱(d)


2 C/C++屬性頁(yè)面中的預(yù)處理器屬性頁(yè)設(shè)置定義
_DEBUG
BUILDING_LIBCURL
DEBUGBUILD
CURL_STATICLIB
USE_WINDOWS_SSPI
USE_SCHANNEL
USE_WINDOWS_SSPI和USE_SCHANNEL兩個(gè)預(yù)編譯處理定義是用來(lái)定義HTTPS,為了使用https協(xié)議需要指定,切記!


3 調(diào)用工程C/C++屬性頁(yè)面中的預(yù)處理器屬性頁(yè)設(shè)置定義

BUILDING_LIBCURL

CURL_STATICLIB

因?yàn)?span >宏定義主要作用于curl/curl.h頭文件,用于頭文件的宏定義條件編譯,必須定義這兩個(gè)宏定義,否則編譯出錯(cuò),看出錯(cuò)分析


2 鏈接錯(cuò)誤分析
1)error LNK2019: 無(wú)法解析的外部符號(hào) __imp__curl_easy_init,該符號(hào)在函數(shù) _main 中被引用
分析:不定義CURL_STATICLIB 編譯結(jié)果,因?yàn)镃URL_EXTERN CURL *curl_easy_init(void);函數(shù)之前有CURL_EXTERN定義,而該定義在
#ifdef CURL_STATICLIB
#? define CURL_EXTERN
#elif defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__)
#? if defined(BUILDING_LIBCURL)
#??? define CURL_EXTERN? __declspec(dllexport)
#? else
#??? define CURL_EXTERN? __declspec(dllimport)
#? endif
#elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS)
#? define CURL_EXTERN CURL_EXTERN_SYMBOL
#else
#? define CURL_EXTERN
#endif

這里被定義,如果沒有定義CURL_STATICLIB,將會(huì)導(dǎo)致CURL_EXTERN被替換成__declspec(dllexport)或者_(dá)_declspec(dllimport),這兩個(gè)聲明只應(yīng)用于動(dòng)態(tài)鏈接,不能應(yīng)用于靜態(tài)鏈接

2)error LNK2019: 無(wú)法解析的外部符號(hào) __imp__ldap_init,該符號(hào)在函數(shù) __ldap_free_urldesc 中被引用
在引用項(xiàng)目的屬性中添加額外的靜態(tài)庫(kù)Crypt32.lib,Wldap32.lib,否則出現(xiàn)如下的錯(cuò)誤,因?yàn)橛玫絟ttps



3)C2371?“curl_share_init”: 重定義;不同的基類型?libcurl

查看源碼,如果沒有定義BUILDING_LIBCURL,將導(dǎo)致curl_share_init在聲明和定義中出現(xiàn)返回類型不一致的問題

#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER)
typedef struct Curl_easy CURL;
typedef struct Curl_share CURLSH;
#else
typedef void CURL;
typedef void CURLSH;
#endif

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI