當前位置:首頁 » 編程軟體 » libcurl靜態編譯

libcurl靜態編譯

發布時間: 2022-06-15 21:22:02

『壹』 linux環境下c 怎麼靜態連接到libcurl

gcc 編譯時加參數 -static, 默認是動態鏈接的

『貳』 為什麼編譯好的curl靜態lib用不了

你把它curl.lib引到庫裡面,然後只包含頭文件的上級目錄,原目錄需要是<curl/curl.h>
1 靜態庫路徑設置正確
2 定義CURL_STSTICLIB 解決extern函數聲明問題,否則是動態庫函數名稱
3 增加ws2_32.lib,wldap32.lib 解決tcp通信問題

『叄』 libcurl是什麼語言開發的

libcurl是C語言開發的網路庫,支持多種網路協議.
有很多種不同的方式來編譯C語言代碼。這里使用UNIX平台下的編譯方式。即使你使用的是其他的操作系統,你仍然可以通過閱讀本文檔來獲取許多有用的信息。

編譯

你的編譯器必須知道libcurl頭文件的位置。所以在編譯的時候,你要設置頭文件的包含路徑。可以使用curl-config工具來獲取這方面的信息:

$ curl-config –cflags

鏈接

編譯完源碼(這時的源代碼不是指libcurl的源代碼,你是你自己寫的程序代碼)之後,你還必須把目標文件鏈接成單個可執行文件。你要鏈接libcurl庫,以及libcurl所依賴的其他庫,例如OpenSLL庫。當然可能還需要一些其他的操作系統庫。最後你還要設置一些編譯選項,當然可以使用curl-config工具簡化操作:

$curl-config –libs

是否使用SSL

定製編譯libcurl。與其他庫不同的是,libcurl可以定製編譯,根據實際需要是否支持某些特性,如是否支持SSL傳輸,像HTTPS和FTPS。如果決定需要支持SSL,必須在編譯時正確的設置。可以使用』curl-config』來判斷libcurl庫是否支持SSL:

$ curl-config –feature

『肆』 如何鏈接libcurl

靜態鏈接libcurl的步驟

1、使用跟程序相同的選項編譯libcurl靜態庫;
2、程序中在引入curl頭文件前定義
#define
CURL_STATICLIB
3、引入庫:
#if defined(_DEBUG)
#pragma comment(lib,
"libcurld.lib")
#else
#pragma comment(lib,
"libcurl.lib")
#endif

#pragma comment ( lib, "ws2_32.lib" )
#pragma
comment ( lib, "wldap32.lib" )

『伍』 如何編譯libcurl

1:linux下源碼編譯
./configure --prefix=/usr/local/curl --disable-shared --enable-static --without-libidn --without-ssl --without-librtmp --without-gnutls --without-nss --without-libssh2 --without-zlib --without-winidn --disable-rtsp --disable-ldap --disable-ldaps --disable-ipv6

注意:不需要其它功能就disable,不然會在連接時報錯, 如果你沒有disable掉,但你的機器上又沒有安裝相應的庫,link時會報錯。

2:windows下源碼編譯
libcurl 7.21以後的版本在Windows下的編譯比較簡單,自帶了MinGW和VC環境的Makefile文件,首先去Curl官網下載源代碼:curl.haxx.se/download.html,任選一個下載即可,推薦這個: curl-7.21.2.tar.gz,下載完成後解壓開,打開命令行進入curl源碼目錄,(在此之前請先設置好MinGW的環境變數):
cd curl-7.21.2
編譯libcurl庫文件:
cd lib
make -f Makefile.m32
等待編譯完成即可
(若需編譯生成curl可執行文件,則執行:
cd ../src
make -f Makefile.m32)

編譯完成後,我們需要復制include頭文件和庫文件到一個目錄供程序開發用
1. 新建curllib目錄
2. 新建curllib/include目錄,將源代碼include目錄里的curl文件夾復制到curllib/include目錄,這些是使用libcurl需要的頭文件
3. 新建curllib/lib目錄,將源代碼lib目錄里編譯好的庫文件libcurl.a,libcurldll.a,libcurl.dll復制到curllib目錄
4. 將MinGW安裝目錄下lib文件夾里的libwldap32.a和libws2_32.a復制到curllib/lib目錄

『陸』 為什麼編譯好的libcurl靜態lib用不了

When building an application that uses the static libcurl library, you must
add -DCURL_STATICLIB to your CFLAGS. Otherwise the linker will look for
dynamic import symbols. If you get linker error like "unknown symbol
__imp__curl_easy_init ..." you have linked against the wrong (static)
library. If you want to use the libcurl.dll and import lib, you don't need
any extra CFLAGS, but use one of the import libraries below

在這里:http://curl.haxx.se/docs/faq.html#Link_errors_when_building_libcur

所以我們這樣來改

菜單-->project -->settings-->C++選項卡的General裡面的Project Option裡面加上-DCURL_STATICLIB (其實就相當於在Preprocessor definitions裡面加上CURL_STATICLIB一樣)

確定-->rebuild all

又出錯了:

libcurl.lib(easy.obj) : error LNK2001: unresolved external symbol
libcurl.lib(telnet.obj) : error LNK2001: unresolved external symbol
libcurl.lib(easy.obj) : error LNK2001: unresolved external symbol

.....

這個一看就明白了馬上加上:

#pragma comment ( lib, "ws2_32.lib" )
#pragma comment ( lib, "wldap32.lib" )

編譯-->叮的一個美妙的聲音想起了,哈哈,編譯成功

『柒』 libcurl庫怎麼得到libcurllib.obj

靜態鏈接libcurl的步驟 1、使用跟程序相同的選項編譯libcurl靜態庫; 2、程序中在引入curl頭文件前定義 #define CURL_STATICLIB 3、引入庫: #if defined(_DEBUG) #pragma comment(lib, "libcurld.lib") #else #pragma comment(lib, "libcurl.li...

熱點內容
如何評價一個伺服器的性能 發布:2025-05-17 23:40:53 瀏覽:270
淘寶客適合什麼伺服器 發布:2025-05-17 23:39:26 瀏覽:612
python循環文件 發布:2025-05-17 23:39:22 瀏覽:828
androidstudio更新 發布:2025-05-17 23:38:22 瀏覽:643
java項目面試 發布:2025-05-17 23:30:53 瀏覽:780
若主存儲器按位元組編址 發布:2025-05-17 23:30:46 瀏覽:24
kotlinandroid 發布:2025-05-17 23:19:09 瀏覽:974
雲編程英語 發布:2025-05-17 23:18:34 瀏覽:623
androidstudio導入類 發布:2025-05-17 23:15:36 瀏覽:237
私人電腦伺服器如何設置 發布:2025-05-17 23:14:48 瀏覽:366