Я пытаюсь скомпилировать и связать программу на ассемблере и c, используя GCC и GNU Make, но когда я запускаю команду "make", она выдает ошибку "не удалось найти GCC", даже если она установленаи работает корректно, после некоторого исправления make-файла теперь выдает команду make find find в строке 14 !!!
Я уже пытался скомпилировать ее на другом компьютере, но она не сработала. И, конечно, я пытался запускать обычные команды GCC, и это работало отлично! Кажется, все в порядке с переменными среды. Если я пытаюсь выполнить команды без make, он выдает синтаксическую ошибку linker.ld, но я предполагаю, что это происходит на мне.
Создать файл:
CC=gcc
TARGET=bookOs
C_FILES=./kernel.c
OBJS=$(C_FILES:.c=.o)
all compile: $(TARGET)
all: finale
.PHONY: all compile clean finale
%.o:
gcc -c $(@:.o=.c) -ffreestanding -fno-exceptions -m32
$(TARGET): $(OBJS)
$(shell nasm -f elf start.asm -o start.o)
gcc -m32 -nostdlib -nodefaultlibs -lgcc start.o $? -T linker.ld -o $(TARGET)
finale:
$(shell cd ~/Desktop/bookOs/)
$(shell cp $(TARGET) ./iso/boot/$(TARGET))
$(shell grub2-mkrescue iso --output=$(TARGET).iso)
clean:
rm -f *.o $(TARGET) $(TARGET).iso
find . -name \*.o | xargs --no-run-if-empty rm
Файл сборки:
bits 32
global _start
extern kernel_early
extern main
section .text
align 4
dd 0x1BADB002 ;magic
dd 0x00
dd - (0x1BADB002 + 0x00) ;checksum
_start:
cli
mov esp, stack
call kernel_early
call main
hlt
section .bss
resb 8192
stack:
C Файл:
static char* const VGA_MEMORY = (char*)0xb8000;
static const int VGA_WIDTH = 80;
static const int VGA_HEIGHT = 25;
void kernel_early(void)
{ }
int main(void) {
const char *str = "Hello world"; unsigned int i = 0;
string position unsigned int j = 0; // place holder for video buffer position
while (str[i] != '\0') {
VGA_MEMORY[j] = str[i];
VGA_MEMORY[j + 1] = 0x07;
i++; j = j + 2;
}
return 0;
}
Файл ссылки:
SECTIONS
{
. = 0x100000;
.text : { *(.text) }
.bss : { *(.bss) }
}
Это ошибка, которую в данный момент выдает:
make: : Command not found
make: *** [Makefile:14: bookOs] Error 127
Я ожидаю, что этот make-файл сгенерирует вывод, связывающий файл c и файл сборки. Заранее спасибо!