代码之家  ›  专栏  ›  技术社区  ›  K. Shores

GCC-C++交叉编译器,缺少库

  •  1
  • K. Shores  · 技术社区  · 8 年前

    我正试图通过 bare bones tutorial 在osdev上。我想用C++构建我的内核。当我尝试编译时,我发现一些链接器错误:

    ~/opt/cross/lib/gcc/i686-elf/7.3.0/../../../../i686-elf/bin/ld: cannot find crt0.o: No such file or directory
    ~/opt/cross/lib/gcc/i686-elf/7.3.0/../../../../i686-elf/bin/ld: cannot find -lstdc++
    ~/opt/cross/lib/gcc/i686-elf/7.3.0/../../../../i686-elf/bin/ld: cannot find -lm
    ~/opt/cross/lib/gcc/i686-elf/7.3.0/../../../../i686-elf/bin/ld: cannot find -lc
    collect2: error: ld returned 1 exit status
    

    我按照指示 make a cross compiler 。我在macOS上,所以我遵循了OS X说明,认为它们仍然相关。

    我确实意识到,我不会得到来自C++的完全运行时支持。上学期我在大学上了一门关于操作系统的课程,但它们为我们设置了很多东西(启动文件、基本内核功能,如在屏幕上放置字符等),还为我们提供了一个运行时环境,所以我从来没有机会学习如何独自完成这一切。我想用C++构建内核,以便用C++构建它,并看看它与我们用C构建的内核有何不同。

    如何构建这些库?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Stephen Newell    8 年前

    您可能需要添加-nostlib,尤其是在制作内核时(它附带了一些注意事项;请检查 man gcc )。 libm libc 是libc的一部分,因此需要编译它。在crt0上不确定。o、 但我猜不是比努蒂尔斯就是libc。