Экранное меню — Ошибка при использовании команды «сделать» в «докере»

#c #linux #docker #osdev

Вопрос:

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

 x86_64_asm_source_files := $(shell find src/impl/x86_64 -name *.asm)  # Holds the list of all of the assembly source files.
x86_64_asm_object_files := $(patsubst src/impl/x86_64/%.asm, build/x86_64/%.o, $(x86_64_asm_source_files))  # Holds the list of all of the obj files.

# Define the command we need to run to build one of the object files from the source files:
$(x86_64_asm_object_files): build/x86_64/%.o : src/impl/x86_64/%.asm
# For compiling the assembly files:
    mkdir -p $(dir $@) amp;amp; 
    nasm -f elf64 $(patsubst build/x86_64/%.o, src/impl/x86_64/%.asm, $@) -o $@

# Create a custom phony command:
.PHONY: build-x86_64

# Run only if any of the object files have been changed:
build-x86_64: $(x86_64_asm_object_files)
# For generating the '.iso' file:
    mkdir -p dist/x86_64 amp;amp; 
    x86_64-elf-ld -n -o dist/x86_64/kernel.bin -T targets/x86_64/linker.ld $(x86_64_asm_object_files) amp;amp; 
    cp dist/x86_64/kernel.bin targets/x86_64/iso/boot/kernel.bin amp;amp; 
    grub-mkrescue /usr/lib/grub/i386-pc -o dist/x86_64/kernel.iso targets/x86_64/iso
 

Когда я запускаю make build-x86_64 внутри контейнера docker, я получаю эту ошибку:

 make: *** No rule to make target 'build-x86_64'.  Stop.
 

Когда я пишу make только команду, кажется, что makefile из-за этой ошибки нет:

 make: *** No targets specified and no makefile found.  Stop.
 

Когда я использую make команду за пределами docker, я получаю:

 mkdir -p build/x86_64/boot/ amp;amp; 
nasm -f elf64  src/impl/x86_64/boot/main.asm -o build/x86_64/boot/main.o
mkdir -p build/x86_64/boot/ amp;amp; 
nasm -f elf64  src/impl/x86_64/boot/header.asm -o build/x86_64/boot/header.o
mkdir -p dist/x86_64 amp;amp; 
x86_64-elf-ld -n -o dist/x86_64/kernel.bin -T targets/x86_64/linker.ld  build/x86_64/boot/main.o  build/x86_64/boot/header.o   amp;amp; 
cp dist/x86_64/kernel.bin targets/x86_64/iso/boot/kernel.bin amp;amp; 
grub-mkrescue /use/lib/grub/i386-pc -o dist/x86_64/kernel.iso targets/x86_64/iso
/bin/sh: 2: x86_64-elf-ld: not found
make: *** [Makefile:16: build-x86_64] Error 127
 

Команда docker, которую я использую для создания самого docker, является: sudo docker build buildenv -t learnos-buildenv

Команда docker, которую я использую для запуска терминала docker,: sudo docker run --rm -it -v /root/env learnos-buildenv

Могу ли я что-нибудь сделать, чтобы исправить docker ? Или как я могу получить x86_64-elf-ld компилятор без использования docker ?

(Моя операционная система для разработки-Ubuntu 20.04.2.0 LTS.)

Комментарии:

1. У вас опечатка. Цель называется build-x86_64 и не build-x86-64 называется .

2. Спасибо! Но даже тогда у меня будет та же проблема.

3. работает ли это за пределами докера?

4.Я попробовал это за пределами docker, и у меня возникли проблемы с компилятором: ` nasm -f elf64 src/impl/x86_64/boot/header.asm -o build/x86_64/boot/header.o /bin/sh: 2: x86_64-elf-ld: not found make: *** [Makefile:16: build-x86_64] Error 127

5. но была ли цель найдена? Если make работал вне докера, убедитесь, что внутри докера make вызывается из правильной папки

Ответ №1:

Все работало, когда я использовал makefile ld команду the вместо x86_64-elf-ld команды, а также я не использовал docker ее для компиляции своего проекта. Если есть какое-либо лучшее решение , которое включает в себя компиляцию файлов docker , пожалуйста, напишите мне.

Спасибо!