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

大端模式下链接文件报错:libgcc_s.so.1格式错误

问题分析与解决

错误原因

你遇到的链接错误本质是字节序不兼容:

  • 用-mbig-endian编译出了大端字节序的目标文件(memory.o、io.o)
  • 但你的arm-linux-gnueabi-gcc交叉工具链默认提供的libgcc_s.so.1是小端字节序的库
  • 大端与小端的二进制文件格式无法混合链接,因此链接器报错

解决方案

方案1:用objdump大端模式查看.data段(最匹配你的需求)

你原本只是想让.data段在objdump中以大端形式显示,不需要真的编译大端程序。直接保持小端编译,再用objdump的大端显示选项即可:

# 保持默认小端编译(无需-mbig-endian)
arm-linux-gnueabi-gcc -c memory.s
arm-linux-gnueabi-gcc -c io.s
arm-linux-gnueabi-gcc -o memory memory.o io.o -z noexecstack

# 以大端模式查看整个程序的二进制内容
objdump -s -EB memory
# 仅查看.data段的大端形式
objdump -j .data -s -EB memory

其中-EB参数会让objdump以大端字节序解析并显示内容,完全满足你查看.data段的需求,同时避免链接错误。

方案2:更换支持大端的交叉工具链

如果确实需要编译大端程序,需确保工具链包含大端版本的库:

  1. 检查当前工具链是否支持大端:
    运行arm-linux-gnueabi-gcc -v,查看输出的配置参数,若没有--with-endian=big类选项,说明当前工具链不支持大端目标。
  2. 安装适配的大端工具链:
    部分Linux发行版提供专门的大端ARM交叉工具包(比如部分发行版可安装gcc-arm-linux-gnueabi-big,具体包名需根据系统调整),安装后用对应大端工具链命令重新编译链接。

方案3:手动指定大端库路径(进阶)

若你的工具链已自带大端库但链接器未找到,可在链接时手动指定库路径。比如大端库可能位于/usr/lib/gcc-cross/arm-linux-gnueabi/13/big-endian/这类目录下,链接时添加-L参数:

arm-linux-gnueabi-gcc -o memory memory.o io.o -mbig-endian -z noexecstack -L/usr/lib/gcc-cross/arm-linux-gnueabi/13/big-endian/

注意:需根据你工具链的实际安装位置调整路径,若找不到对应目录,说明工具链未自带大端库,建议改用方案2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 13:33:13