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

时间:2018-04-27 00:10:04

标签: c++ cross-compiling

我正在尝试浏览osdev上的bare bones tutorial。我想用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 个答案:

答案 0 :(得分:3)

你可能需要添加-nostdlib,特别是如果你正在创建一个内核(它带有一些警告;请检查man gcc)。 libmlibc是libc的一部分,因此您需要编译它。在crt0.o上不确定,但我的猜测是binutils或libc。