c - libgcc_s.so : Error adding symbols: File in wrong format

标签 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:Error adding symbols:File in wrong format

我正在 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) }
}

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

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

最佳答案

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

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

关于c - libgcc_s.so : Error adding symbols: File in wrong format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44985009/

相关文章:

c - 字符串比较差异(适用于某些情况,有时无效)

php - Laravel: PHP Parse error: syntax error, unexpected '?' in/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php 第500行

ubuntu - 在启用压缩的情况下发送 Openssl 客户端问候

c - 可以在调用 pthread_cond_wait() 之前检查互斥锁是否已锁定吗?

c - 有冲突类型错误

linux - 如何在Linux中找到哪个进程正在生成另一个进程?

python - 从 python 运行代码与从 bash 运行代码有不同的权限?

python - 无法以不同用户身份运行命令

bash - [Google Cloud][Compute Engine] 在启动脚本中找不到 Linux 基础命令

c - ReleaseStringUTF 能做的不仅仅是释放内存吗?