私自身の趣味のオペレーティングシステム用の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
すべてのヘルプは大歓迎です、ありがとう!
ありがとうございました。私は自分自身を知っていました。私は既に--ffreestandingフラグをコンパイラに渡します。コードをビルドしてリンクするために実行するコマンドで質問を更新しました。 – 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