无法找到crtn.o,在64位系统上连接32位代码。

9

我正在尝试在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已经安装。

1
可能是重复的问题:编译问题:找不到crt1.o - user2284570
3个回答

11

2
您需要安装gcc-multilib以获取适当的32位库。

0

我在Ubuntu 11.10上遇到了非常类似的问题。请参考我的SO问题。对我有帮助的是将crt*.o链接到/lib/。之后,我再也没有遇到这个问题了。虽然有点笨拙,但对我来说解决了问题。


1
你的意思是什么,"将crt*.o链接到/lib/"? - skittlebiz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接