Debian系統使用GCC進行跨平臺編譯的方法
交叉編譯的核心是安裝目標平臺對應的工具鏈。Debian通過APT包管理器提供常用工具鏈,可根據目標架構選擇:
gcc-arm-linux-gnueabi
(軟浮點)或gcc-arm-linux-gnueabihf
(硬浮點,推薦用于帶浮點硬件的ARM設備);gcc-mips-linux-gnu
;gcc-powerpc-linux-gnu
。sudo apt update
sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
為簡化工具鏈調用,需將交叉編譯器路徑添加到PATH
環境變量。以ARM工具鏈為例:
export PATH=$PATH:/usr/bin/arm-linux-gnueabihf
建議將上述命令添加到~/.bashrc
或~/.profile
文件中,實現每次登錄自動生效。
創建Makefile
文件,明確指定交叉編譯器及編譯選項。示例如下:
# 定義交叉編譯器
CC = arm-linux-gnueabihf-gcc
CXX = arm-linux-gnueabihf-g++
AR = arm-linux-gnueabihf-ar
LD = arm-linux-gnueabihf-ld
# 編譯選項:開啟警告、優化級別2
CFLAGS = -Wall -O2
CXXFLAGS = -Wall -O2
# 目標程序名稱
TARGET = myapp
# 源文件列表
SRCS = main.c utils.c
OBJS = $(SRCS:.c=.o)
# 默認目標
all: $(TARGET)
# 鏈接目標文件生成可執行文件
$(TARGET): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $^
# 編譯源文件為目標文件
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
# 清理生成的文件
clean:
rm -f $(OBJS) $(TARGET)
運行make
命令即可啟動交叉編譯。
若項目使用CMake,需創建toolchain.cmake
文件指定工具鏈路徑,再配置CMakeLists.txt。示例如下:
# 設置交叉編譯器
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
# 設置目標系統(可選)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
cmake_minimum_required(VERSION 3.10)
project(myapp)
add_executable(myapp main.c)
編譯命令:
mkdir build && cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake ..
make
make
或cmake
+make
),生成的目標文件將適配目標平臺。file
命令檢查生成的可執行文件,確認為目標平臺架構。示例如下:file myapp
# 輸出示例:ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, for GNU/Linux 3.2.0
sudo apt install qemu-user-static
運行交叉編譯后的程序:qemu-arm-static ./myapp
# 目標設備:啟動GDB服務器(監聽1234端口)
arm-linux-gnueabihf-gdbserver :1234 ./myapp
# 主機端:連接至目標設備
arm-linux-gnueabihf-gdb ./myapp
(gdb) target remote localhost:1234