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