zoukankan      html  css  js  c++  java
  • ld: i386 架构于输入文件 bar.o 与 i386:x86-64 输出不兼容

    报错:ld: i386 架构于输入文件 foo.o 与 i386:x86-64 输出不兼容

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

    编译链接指令
    1

    1
    nasm -f elf foo.s -o foo.o
    2

    1
    gcc -c bar.c -o bar.o
    3

    1
    ld -s -o foobar bar.o foo.o
    汇编语言用nasm编写并用nasm编译器编译,而C语言用的是gcc编译,这些都没有问题,但是在链接的时候出错了,提示如下:
    ld: i386 architecture of input file `foo.o' is incompatible with i386:x86-64 output

    意思就是nasm 编译产生的是32位的目标代码,gcc 在64位平台上默认产生的是64位的目标代码,这两者在链接的时候出错,gcc在64位平台上默认以64位的方式链接。
    这样在解决的时候就会有两种解决方案:
    <1> 让gcc 产生32位的代码,并在链接的时候以32位的方式进行链接
    在这种情况下只需要修改编译和链接指令即可,具体如下:
    32位的编译链接指令
    1

    1
    nasm -f elf foo.s -o foo.o
    2

    1
    gcc -m32 -c bar.c -o bar.o
    3

    1
    ld -m elf_i386 -s -o foobar foo.o bar.o
    具体的-m32 和 -m elf_i386 请自行查阅gcc (man gcc)

  • 相关阅读:
    MPlayer源代码分析
    洛谷 P1025 数的划分
    洛谷 P1209 [USACO1.3]修理牛棚 Barn Repair
    洛谷 P1744 采购特价商品
    洛谷 P1443 马的遍历
    洛谷 P1294 高手去散步
    洛谷 P2104 二进制
    洛谷 P1088 火星人
    洛谷 P1062 数列
    洛谷 P2005 A/B Problem II
  • 原文地址:https://www.cnblogs.com/liubiyonge/p/9405623.html
Copyright © 2011-2022 走看看