c++ - 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 构建的内核有何不同。
如何构建这些库?
解决方案
您可能需要添加 -nostdlib,尤其是在您制作内核时(它带有一些警告;检查man gcc
)。libm
并且libc
是你的 libc 的一部分,所以你需要编译它。不确定 crt0.o,但我的猜测是 binutils 或 libc。
推荐阅读
- java - Interface for Lazy Loaded List of Objects
- python - 如何确定一个库(例如在 pypi.org 上)是否适用于 Python 3
- swift - 视图内容没有出现在 UIScrollView 中
- c# - Window.show 未在 wpf 中加载内容
- spring-boot - 如何根据条件限制 Spring 中 stomp 客户端的数量,订阅特定主题?
- docker - Azure 容器注册表:得到“无法在 unix:///var/run/docker.sock 连接到 Docker 守护程序。docker 守护程序是否正在运行?”
- python - 如何检索 data_value 中的内容?在 python 中使用硒?
- r - 在 R Shiny 中过滤,选择输入到 textOutput
- pointers - 如何在 Rust 中使用内部指针实现可重定位数据?
- java - 重新启用屏幕截图在带有手势导航的 android 10 上不起作用