【问题标题】:Cannot find crtn.o, linking 32 bit code on 64 bit system找不到 crtn.o,在 64 位系统上链接 32 位代码
【发布时间】:2012-04-06 03:31:11
【问题描述】:

我正在尝试在 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 64-bit nasm ld


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您需要安装 gcc-multilib 以获得正确的 32 位库

    【讨论】:

      【解决方案3】:

      我在 ubuntu 11.10 上遇到了非常相似的问题。 See my question on SO about this。对我有帮助的是将crt*.o 链接到/lib/。在那之后,我再也没有遇到过这个问题的其他问题。有点杂乱无章,但对我来说它解决了问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-06
        • 2020-08-16
        • 1970-01-01
        • 1970-01-01
        • 2012-03-16
        • 1970-01-01
        • 1970-01-01
        • 2011-09-30
        相关资源
        最近更新 更多