Кросс-компилятор GCC-C++, отсутствующие библиотеки
Я пытаюсь пройти учебник по osdev. Я хотел бы собрать свое ядро, используя C++. Когда я пытаюсь скомпилировать, я получаю несколько ошибок компоновщика:
~/opt/cross/lib/gcc/i686-elf/7.3.0/../../../../i686-elf/bin/ld: cannot find crt0.o: No such file or directory
~/opt/cross/lib/gcc/i686-elf/7.3.0/../../../../i686-elf/bin/ld: cannot find -lstdc++
~/opt/cross/lib/gcc/i686-elf/7.3.0/../../../../i686-elf/bin/ld: cannot find -lm
~/opt/cross/lib/gcc/i686-elf/7.3.0/../../../../i686-elf/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status
Я следовал инструкциям, чтобы сделать кросс-компилятор. Я нахожусь на macOS, поэтому я следовал инструкциям OS X, полагая, что они все еще будут актуальны.
Я понимаю, что у меня не будет полной поддержки времени выполнения из C++. В прошлом семестре я проходил курс обучения по операционным системам в моем университете, но они для нас сильно настроены (загрузочный файл, базовые функциональные возможности ядра, такие как вывод символа на экран и т. Д.), А также предоставили нам среду выполнения для использования, поэтому я никогда не получал возможность научиться делать все это самостоятельно. Я хотел бы собрать ядро в C++ ради его построения в C++ и посмотреть, как это будет отличаться от ядра, которое мы строим в C.
Как я могу построить эти библиотеки?
1 ответ
Вероятно, вам нужно добавить -nostdlib, особенно если вы создаете ядро (оно поставляется с некоторыми оговорками; проверьте man gcc
). libm
а также libc
являются частью вашего libc, так что вам нужно будет скомпилировать это. Не уверен на crt0.o, но я думаю, это либо binutils, либо libc.