gcc - 无法找到 crtn.o,在 64 位系统上链接 32 位代码

标签 gcc 64-bit nasm ld

我正在尝试在 64 位系统上使用 NASM 和 GCC 汇编一些 32 位代码。我使用以下两个命令

nasm -f elf32 -g -F stabs coc.asm
gcc -m32 -o coc coc.o

NASM 似乎表现不错,但 LD 提示:

/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/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.6.1/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: cannot find -lc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/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.6.1/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: cannot find crtn.o: No such file or directory
collect2: ld returned 1 exit status

我正在运行 Ubuntu 11.10,我检查过并且非常确定 libc 已安装。

最佳答案

您不是在汇编,而是链接一个可执行文件,它需要操作系统启动文件。

您似乎没有安装 gcc-*-multilib,其中包含必要的文件:http://packages.ubuntu.com/oneiric/amd64/gcc-4.6-multilib/filelist

关于gcc - 无法找到 crtn.o,在 64 位系统上链接 32 位代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9807581/

相关文章:

c++ - C11/C++11 内存模型

从指针转换为整数。到底发生了什么?

c - 如何处理 CUDA 设备上的 64 位字?

c - 汇编程序中的循环迭代不正确

c++ - 按引用传递变量时出现 "Undefined reference"错误

linux - OpenCv 人脸检测示例卡住,没有任何错误或日志

捕获带有副作用的 assert()

macos - 如何使用 printf 为 64 位 Mac OS X 编写汇编语言 hello world 程序?

assembly - 删除程序集中的文件

assembly - 字和字操作数的大小是多少?