libgcc_s.so:添加符号时出错:文件格式错误

时间:2017-07-08 10:10:59

标签: c linux ubuntu gcc linker

当使用像gcc -march i486 -m32 -e Harimain -o bootpack.hrb bootpack.c hankaku.c naskfunc.o这样的GCC时,编译器运行良好。但当我添加-T link.ls时,它告诉我:

  

libgcc_s.so:错误添加符号:文件格式错误

我在64位PC上创建32位二进制文​​件。这是我的链接器脚本:

OUTPUT_FORMAT("binary");
SECTIONS
{
    .head 0x0 : {
        LONG(0x64 * 1024)  /*  0 : stack+.data+heap の大きさ(4KBの倍数) */
        LONG(0x69726148)      /*  4 : シグネチャ "Hari" */
        LONG(0)               /*  8 : mmarea の大きさ(4KBの倍数) */
        LONG(0x310000)        /* 12 : スタック初期値&.data転送先 */
        LONG(SIZEOF(.data))   /* 16 : .dataサイズ */
        LONG(LOADADDR(.data)) /* 20 : .dataの初期値列のファイル位置 */
        LONG(0xE9000000)      /* 24 : 0xE9000000 */
        LONG(main - 0x20) /* 28 : エントリアドレス - 0x20 */
        LONG(0)               /* 32 : heap領域(malloc領域)開始アドレス */
}
   .text : { *(.text) }
   .data 0x310000 : AT ( ADDR(.text) + SIZEOF(.text) ) {
        *(.data)
        *(.rodata*)
        *(.bss)
}   /DISCARD/ : { *(.eh_frame) }
}

操作系统是64位Ubuntu 16.04,GCC版本是5.4.0。

问题是什么,我该如何解决?

1 个答案:

答案 0 :(得分:0)

GCC默认构建共享程序。因此,请尝试将-static添加到命令行。您可能还需要-ffreestanding

我在做这些事情时的建议是分离编译和链接器命令,并使用ld而不是gcc来执行链接。在进行链接器阶段时,gcc会假设太多事情。