在64位计算机上链接32位NASM文件的问题

时间:2017-06-27 13:14:24

标签: assembly x86 nasm

所以我正在学习x86 NASM程序集,我正在制作我的第一个小程序。

NASM代码

extern printf

segment .data

prompt1 db  "Hello World!", 0   ; Null-terminated

segment .text

global main

main:
  pushad

  push dword    prompt1
  call          printf
  add           esp, 4
  popad
  ret
然后我做nasm -f elf32 HelloWorld.asm,创建一个HelloWorld.o文件。然后我做gcc -m32 HelloWorld.o -o HelloWorld

这会返回错误:

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s

collect2:错误:ld返回1退出状态

-m32elf32的使用是基于各种其他StackOverflow线程的建议。我已经尝试过安装像i386 GCC和G ++库这样的东西(修复了它说架构错误的问题)。

正如标题所说,这是32位汇编,但我的笔记本电脑是64位。

提前致谢。

1 个答案:

答案 0 :(得分:3)

我通过安装libgcc32-4.8-dev修复了这个问题。我已经安装了gcc-multilib,所以也许两者的组合就是我所需要的。