運行配置腳本
使用?Configure
?腳本配置 OpenSSL,指定目標平臺和安裝路徑:
curl downloads? 各個版本
Old 1.1.1 Releases | OpenSSL Library? ?各個版本
從 OpenSSL 官網下載源碼包
tar -xzf openssl-1.1.1b.tar.gz
cd openssl-1.1.1b/
運行配置腳本
使用?Configure
?腳本配置 OpenSSL,指定目標平臺和安裝路徑:?
./Configure linux-armv4 --prefix=/home/lxh/arm-libs/install --cross-compile-prefix=arm-linux-gnueabihf-
-
-
linux-armv4
:指定目標平臺為 ARM。 -
--prefix
:指定安裝路徑(替換為你的目標路徑)。 -
--cross-compile-prefix
:指定交叉編譯工具鏈前綴。
-
-
調整配置(可選)
如果需要調整配置,可以編輯生成的?Makefile
,例如:-
修改?
CFLAGS
?和?LDFLAGS
?以優化編譯選項。 -
確保?
-march=armv7-a
?或?-mcpu=cortex-a9
?等選項適合你的目標硬件。 -
編譯 OpenSSL
-
編譯源碼
運行以下命令開始編譯:make -j$(nproc)
-
-j$(nproc)
:使用多核并行編譯以加快速度。
-
-
檢查編譯結果
編譯完成后,檢查生成的庫文件和可執行文件:file apps/openssl
輸出應顯示為 ARM 架構的可執行文件。
-
將編譯好的 OpenSSL 安裝到指定路徑:
make install
下載并解壓 curl 源碼
tar -xvjf curl-7.64.1.tar.bz2
cd curl-7.64.1
使用?configure
?腳本配置編譯選項,指定交叉編譯工具鏈和目標平臺
./configure --host=arm-linux-gnueabihf --prefix=/home/lxh/arm-libs/install \--with-ssl=/home/lxh/arm-libs/install \--disable-ldap \--disable-ldaps \--without-libpsl \--without-libidn2 \--without-zstd \--without-brotli \--without-libpsl \CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++
-
--host=arm-linux-gnueabihf
:指定目標平臺為 ARM。 -
--prefix=/home/lxh/arm-libs/install
:指定安裝目錄。 -
--with-ssl
?和?--with-zlib
:啟用 SSL 和 zlib 支持。 -
CC
?和?CXX
:指定交叉編譯器
編譯和安裝
make -j$(nproc)
make install
在 ARM 設備上運行?curl
,驗證是否正常工作。
testcurl.c
#include <curl/curl.h>
int main(void)
{CURL *curl;CURLcode res;curl_global_init(CURL_GLOBAL_DEFAULT);curl = curl_easy_init();if (curl){curl_easy_setopt(curl, CURLOPT_URL, "https://www.baidu.com");res = curl_easy_perform(curl);if (res != CURLE_OK)fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));curl_easy_cleanup(curl);}curl_global_cleanup();return 0;
}
makefile
# 交叉編譯工具鏈
CC = arm-linux-gnueabihf-gcc# curl 庫的安裝路徑
CURL_DIR = /home/lxh/arm-libs/install# 編譯選項
CFLAGS = -I$(CURL_DIR)/include
LDFLAGS = -L$(CURL_DIR)/lib -lcurl -lssl -lcrypto# 目標可執行文件
TARGET = curl_example# 源文件
SRCS = testcurl.c# 默認目標
all: $(TARGET)# 編譯規則
$(TARGET): $(SRCS)$(CC) $(CFLAGS) -o $(TARGET) $(SRCS) $(LDFLAGS)# 清理
clean:rm -f $(TARGET)