Я пишу ядро C++ для своей собственной операционной системы хобби. Я работаю над mac и компилировал рабочий (до сих пор) кросс-компилятор из gcc версии 4.8.2.Linker не может найти стандартные библиотеки
В настоящее время у меня есть файл 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, я знал, что я был один. Я уже передаю компилятор флаг --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