c语言文件不兼容,编译C文件时不支持的x86-64指令集错误

我正在尝试按照

this链接中的教程.

当我开始编写test.c文件的部分时,我尝试运行第一个编译行.

gcc -c -g -Os -march=i686 -ffreestanding -Wall -Werror test.c -o test.o

这是test.c的内容

__asm__(".code16\n");

__asm__("jmpl $0x0000,$main\n");

void main() {

}

当我调用第一个编译行时,它会显示我的错误.

test.c:1:0: error: cpu you selected does not support x86-64 instruction set

__asm__(".code16\n");

^

谁能告诉我为什么会这样?如果可能的话,如何修复它?

我正在运行Ubuntu Desktop x64,请提前感谢您的帮助.

编辑:

我已将第一个编译行更改为:

gcc -c -g -Os -m32 -ffreestanding -Wall -Werror test.c -o test.o

它似乎工作正常.但是,还有两条线路给我带来了麻烦.

ld -static -Ttest.ld -nostdlib --nmagic -o test.elf test.o

objcopy -O binary test.elf test.bin

第一个抛出了我的错误.

ld: i386 architecture of input file `test.o' is incompatible with i386:x86-64 output

因此,我还没有尝试最后的编译.

这是test.ld文件的代码.

ENTRY(main);

SECTIONS

{

. = 0x7C00;

.text : AT(0x7C00)

{

*(.text);

}

.sig : AT(0x7DFE)

{

SHORT(0xaa55);

}

}

对于如何解决这个问题,有任何的建议吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值