无法编译程序集:/ usr / bin / ld:i386输入文件架构`array1.o'与i386:x86-64输出不兼容

时间:2015-07-12 16:19:53

标签: gcc assembly x86 nasm

我正在使用Kali linux 64位,我正在尝试从Paul Carter博士的网站执行以下程序。 gcc命令给出错误。我应该在gcc命令中使用什么?

nasm -f elf32 array1.asm
root@kali:assembly# gcc -o array1 array1.o array1c.c
array1c.c:9:1: warning: ‘cdecl’ attribute ignored [-Wattributes]
array1c.c:10:1: warning: ‘cdecl’ attribute ignored [-Wattributes]
/usr/bin/ld: i386 architecture of input file `array1.o' is    incompatible    with i386:x86-64 output
collect2: error: ld returned 1 exit status

4 个答案:

答案 0 :(得分:5)

您正在尝试将32位目标文件i386链接到64位可执行文件(i386:x86-64)。将-m32添加到gcc编译行以创建32位可执行文件。

答案 1 :(得分:2)

首先安装:

sudo apt-get install gcc-multilib g++-multilib

然后以这种方式进行评估和链接:

nasm -f elf array1.asm -o array1.o

最后,

gcc -m32 array1.o -o array1.out

并运行,

./array1.out

这应该有用......

答案 2 :(得分:2)

nasm -f elf64 array1.asm

然后

ld -s -o array1 array1.o

答案 3 :(得分:1)

(哎呀,我只是撇开了这个问题,并且认为你只用ld创建了一个独立的可执行文件。请参阅cad的gcc -m32答案,因为当你想要链接时libc以及所有这些,而不是仅仅尝试一些小实验。)

你必须告诉ld你希望输出的机器是什么。它默认为本机类型。

nasm -f elf32 array1.asm  # or yasm
ld -m elf_i386 array1.o -o 32bit-array1

不幸的是,很多asm指南/资源仍然有32位x86代码的例子。