【发布时间】:2017-05-30 08:24:32
【问题描述】:
我正在为自己的爱好操作系统编写 C++ 内核。我在 Mac 上工作,并从 gcc 版本 4.8.2 编译了一个工作(直到现在)交叉编译器。
目前我有一个kernel.cpp 文件,只包含一个main() 函数,当我只编译和链接这个文件时,一切正常。但是,当我在另一个文件中添加一个类时,链接器开始抱怨:
/opt/cross/gcc-i686-elf/lib/gcc/i686-elf/4.8.2/../../../../i686-elf/bin/ld: cannot find -lstdc++
/opt/cross/gcc-i686-elf/lib/gcc/i686-elf/4.8.2/../../../../i686-elf/bin/ld: cannot find -lm
/opt/cross/gcc-i686-elf/lib/gcc/i686-elf/4.8.2/../../../../i686-elf/bin/ld: cannot find -lc
/opt/cross/gcc-i686-elf/lib/gcc/i686-elf/4.8.2/../../../../i686-elf/bin/ld: cannot find -lc
我发现这些都是缺少的标准库,对吧?
一个有趣的细节是,当我将相同的类添加到 kernel.cpp 而不是新文件时,它就像一个魅力。
谁能帮助我找到这些库,如果它们不可用,我该如何获得它们?它们应该随交叉编译器一起提供,还是应该已经在我的 macOS 上可用?
这就是我构建代码的方式:
i686-elf-g++ -Wall -ffreestanding -m32 vga/vga.cpp kernel.cpp -o kernel.bin
欢迎任何帮助,谢谢!
【问题讨论】:
标签: linker g++ kernel libraries osdev