找不到crtn.o,在64位系统上链接32位代码

时间:2012-03-21 15:22:20

标签: 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。

3 个答案:

答案 0 :(得分:11)

您不是在组装,而是链接需要OS启动文件的可执行文件。

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

答案 1 :(得分:2)

您需要安装gcc-multilib才能获得正确的32位lib

答案 2 :(得分:0)

我在ubuntu 11.10上遇到了类似的问题。 See my question on SO about this。对我有帮助的是将crt*.o/lib/相关联。在那之后我从未遇到过这个问题的其他问题。更多的是一个淤泥,但对我来说它解决了这些问题。