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

Issue with Linking a 32-bit NASM file on a 64-bit machine

所以我正在学习 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.

这returns一个错误:

/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 的使用是根据其他各种 Whosebug 线程的建议。我试过安装像 i386 GCC 和 G++ 库这样的东西(它解决了架构错误的问题)。

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

提前致谢。

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