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)

  • 相关阅读:
    关于Windows窗口框架
    如何获取桌面截图
    浅析Windows安全相关的一些概念
    怎样才算会一门编程语言
    COM思想的背后
    XP之后Windows的一些变化
    智能指针与库
    SOUI开发应用展示2
    在SOUI中支持高分屏显示
    SOUI Editor使用教程
  • 原文地址:https://www.cnblogs.com/liubiyonge/p/9405623.html
Copyright © 2011-2022 走看看