首页 > 解决方案 > GCC-C++ 交叉编译器,缺少库

问题描述

我正在尝试通过 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

我按照说明制作了一个交叉编译器。我在 macOS 上,所以我按照 OS X 的说明进行操作,认为它们仍然是相关的。

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

如何构建这些库?

标签: c++cross-compiling

解决方案


您可能需要添加 -nostdlib,尤其是在您制作内核时(它带有一些警告;检查man gcc)。libm并且libc是你的 libc 的一部分,所以你需要编译它。不确定 crt0.o,但我的猜测是 binutils 或 libc。


推荐阅读