0
我正在为自己的业余爱好操作系统编写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
欢迎任何帮助,谢谢!
谢谢Sjur,我知道我是独立的。我已经把这个--freestanding标志传递给了编译器。我用我执行的命令更新了问题,以构建和链接代码。 – Pieter
[发现这是osdev wiki。](http://wiki.osdev.org/Why_do_I_need_a_Cross_Compiler%3F#Options_that_you_should_pass_to_your_Compiler)您还应该添加-nostdlib和-lgcc。 –
谢谢,-nostdlib做到了!也感谢您在OSDev上指出这个页面。我在寻找答案时看到了很多他们的网页,但我没有找到这个答案。 – Pieter