vslibcurl編譯
A. 求助.編譯libcurl+ssl的時候一直不支持ssl-CSDN論壇
原因是linux有一個SELinux保護模式引起的。1.關閉SELINUX的方法:vi/etclinux/config將SELINUX=enforcing改成SELINUX=disabled需要重啟2.不關閉SELINUX的方法:#setenforce0#chcon-c-v-R-usystem_u-robject_r-ttextrel_shlib_t/usr/local/apache/moles/libphp5.so#servicehttpdrestart#setenforce1
B. Win10下NDK 編譯curl&protobuf
Android開發者編寫指南
在Windows環境下進行NDK(Native Development Kit)編譯curl與protobuf的過程,以下步驟作為參考:
創建curl編譯目錄(CURL_BUILD_DIR)位於:
c: dk\21.4.7075529\samples\curl\jni
將curl源碼(curl-8.2.1)放入CURL_BUILD_DIR下。
在CURL_BUILD_DIR創建Android.mk文件,配置編譯參數。
准備curl_config.h文件,生成非Windows版本以避免編譯時尋找錯誤路徑,建議在cygwin環境下使用configure命令進行生成。
執行ndk-build命令於CURL_BUILD_DIR,生成libcurl.so。
創建protobuf編譯目錄(PROTOBUF_BUILD_DIR)位於:
c: dk\21.4.7075529\samples\protobuf\jni
在PROTOBUF_BUILD_DIR創建Android.mk文件,配置protobuf編譯參數。
將protobuf源碼protobuf-cpp-3.21.12下的src目錄復制至PROTOBUF_BUILD_DIR。
執行ndk-build命令於PROTOBUF_BUILD_DIR,生成libprotobuf.a。
若遇到集成libprotobuf.a時出現"undefined reference to __android_log_write'"錯誤,直接在src/google/protobuf/stubs/common.cc中注釋相關代碼行即可解決。
C. libcurl是什麼語言開發的
編譯源碼
有很多種不同的方式來編譯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
autoconf宏
當你編寫配置腳本來檢測libcurl及其相應設置時,你可以使用預定義宏。文檔docs/libcurl/libcurl.m4告訴你如何使用這些宏。
跨平台的可移植的代碼
libcurl的開發人員花費很大的努力,使libcurl盡可能在大多數平台上正常運行。
全局初始化
應用程序在使用libcurl之前,必須先初始化libcurl。libcurl只需初始化一次。可以使用以下語句進行初始化:
curl_global_init();
curl_global_init()接收一個參數,告訴libcurl如何初始化。參數CURL_GLOBAL_ALL 會使libcurl初始化所有的子模塊和一些默認的選項,通常這是一個比較好的默認參數值。還有兩個可選值:
CURL_GLOBAL_WIN32
只能應用於Windows平台。它告訴libcurl初始化winsock庫。如果winsock庫沒有正確地初始化,應用程序就不能使用socket。在應用程序中,只要初始化一次即可。
CURL_GLOBAL_SSL
如果libcurl在編譯時被設定支持SSL,那麼該參數用於初始化相應的SSL庫。同樣,在應用程序中,只要初始化一次即可。
libcurl有默認的保護機制,如果在調用curl_easy_perform時它檢測到還沒有通過curl_global_init進行初始化,libcurl會根據當前的運行時環境,自動調用全局初始化函數。但必須清楚的是,讓系統自已初始化不是一個好的選擇。
當應用程序不再使用libcurl的時候,應該調用curl_global_cleanup來釋放相關的資源。
在程序中,應當避免多次調用curl_global_init和curl_global_cleanup。它們只能被調用一次。