当像 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/