You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

aarch64-linux-gnu-gcc交叉编译ARM程序时main.o格式错误问题

问题根因

本次链接错误的核心原因是交叉编译器配置不全:

  • 编译C++源码main.cpp时,调用了宿主x86架构的原生g++,生成x86格式的main.o;其余C语言源码使用你指定的aarch64-linux-gnu-gcc编译,生成正确的ARM aarch64格式目标文件,二者架构不匹配导致链接失败。
  • 你配置的--host=arm-elf-linux参数与目标aarch64架构不匹配,也会导致部分编译规则默认使用原生编译器。

解决方案

方案1:全局修正编译配置(推荐)

先清理历史编译缓存,避免旧文件干扰:

make distclean

执行修正后的configure命令,同时指定C、C++全链路交叉编译器和正确的目标架构参数:

./configure --host=aarch64-linux-gnu \
CC=aarch64-linux-gnu-gcc \
CXX=aarch64-linux-gnu-g++ \
AR=aarch64-linux-gnu-ar \
RANLIB=aarch64-linux-gnu-ranlib \
--disable-sdl --disable-ffmpeg --disable-v4l2 --disable-openh264 --disable-libwebrtc --disable-libyuv

重新编译即可:

make dep && make

方案2:仅修改PJSUA2_TEST模块配置(临时修复)

如果你不想重新执行全量配置,可直接在你定位到的Makefile代码段中,为C++源码单独指定交叉编译器:

# Defines for building pjsua2-test application
export PJSUA2_TEST_SRCDIR = ../src/pjsua2-test
export PJSUA2_TEST_OBJS += $(OS_OBJS) $(M_OBJS) $(CC_OBJS) $(HOST_OBJS) main.o
export PJSUA2_TEST_CFLAGS += $(_CFLAGS) $(PJ_VIDEO_CFLAGS)
export PJSUA2_TEST_CXXFLAGS = $(_CXXFLAGS) $(PJSUA2_LIB_CFLAGS) $(PJ_VIDEO_CFLAGS)
export PJSUA2_TEST_LDFLAGS += $(PJ_LDXXFLAGS) $(PJ_LDXXLIBS) $(LDFLAGS)
# 新增下面这行,指定C++交叉编译器
export PJSUA2_TEST_CXX = aarch64-linux-gnu-g++

注意:修改后必须删除已生成的x86架构main.o文件,否则会复用旧文件导致问题依旧,之后重新执行make即可编译通过。

内容的提问来源于stack exchange,提问作者SleepyCat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:24:02