Mini OS: связывание скомпилированных и собранных .o файлов - PullRequest
0 голосов
/ 20 июня 2011

Я пытаюсь настроить рабочую среду для сборки загрузчика, компиляции и компоновки простого ядра согласно этой странице: введите описание ссылки здесь

Пока все прошло хорошоОднако я не могу обойти эту ошибку компоновщика:

C:\Users\----\Desktop\>ld -T linker.ld -o kernel.bin --oformat binary loader.o kernel.o
ld: cannot perform PE operations on non PE output file 'kernel.bin'.

Страницы руководства ld, на мой взгляд, слишком загадочны и не дают никаких ответов на это конкретное сообщение об ошибке.*

(я использую 64-битную Windows 7)

1 Ответ

0 голосов
/ 20 июня 2011

Я просмотрел часть этой статьи об OSDev, но на машине с Linux. Во-первых, я должен указать на второе предложение предисловия о том, что вы должны установить GCC кросс-компилятор , поскольку вы работаете на компьютере с Windows. Но я считаю, что именно ваша ошибка относительно выходного файла PE связана с тем, как ld настроен для Windows против Linux. Linux использует формат ELF для исполняемых файлов, в то время как Windows использует формат PE. Это два совершенно разных способа представления программного / исполняемого файла. Для обучения OSDev вам необходимо связать ядро ​​в формате ELF.

Если вы следуете статье о настройке кросс-компилятора GCC, вам следует перейти к разделу о сборке 'binutils'. Убедитесь, что ваша цель настроена на i586-elf. Продолжайте читать статью, и вы сможете настроить компоновщик ld для связи с целью ELF вместо формата PE.

...