错误代码
这是我的错误代码,上面写着--32是错误行,请帮助我解决错误
pravin@pravin-VirtualBox:~/Desktop/my os 2$ make loader.o
g++ --32 -o s@ loader.s
g++: error: unrecognized command line option ‘--32’; did you mean ‘-m32’?
Makefile:11: recipe for target 'loader.o' failed
make: *** [loader.o] Error 1
我试图解决这个问题,但我不能,请尽快帮忙
生成文件代码
GCCPARAMS = -m32 -Iinclude -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore -Wno-write-strings
ASPARAMS = --32
LDPARAMS = -melf_i386
objects = loader.o kernel.o
%.o: %.cpp
g++ $(GPPPARAMS) -o s@ -c $<
%.o: %.s
g++ $(ASPARAMS) -o s@ $<
mykernel.bin: linker.ld $(objects)
ld $(LDPARAMS) -T $< -o $@ $(objects)
install: mykernel.bin
sudo cp $< /boot/mykernel.bin
装载机
.set MAGIC, 0x1badb002
.set FLAGS, (1<<0 | 1<<1)
.set CHECKSUM, -(MAGIC + FLAGS)
.section .multiboot
.long MAGIC
.long FLAGS
.long CHECKSUM
.section .text
.extern kernelMain
.extern callConstructors
.global loader
loader:
mov $kernel_stack, %esp
call callConstructors
push %eax
push %ebx
call kernelMain
_stop:
cli
hlt
jmp _stop
.section .bss
.space 2*1024*1024; # 2 MiB
kernel_stack:
如果有人知道如何解决这个问题。我想学习如何从头开始制作操作系统,但这个错误让我很讨厌
最佳答案
ASPARAMS = --32
...
%.o: %.s
g++ $(ASPARAMS) -o s@ $<
这是我的错误代码,上面写着——32是错误线…
使用
-Wa,--32
。-Wa
将参数传递给汇编器,类似于-Wl
将参数传递给链接器的方式。当使用编译器驱动汇编器和连结器时,需要-Wa
和-Wl
。可能是这样的:CXX = g++
ASPARAMS = -Wa,--32
...
%.o: %.s
$(CXX) $(ASPARAMS) -o s@ $<
如果直接调用汇编器和链接器,则不会使用
-Wa
和-Wl
。例如,makefile配方可能如下所示:AS = as
ASPARAMS = --32
...
%.o: %.s
$(AS) $(ASPARAMS) -o s@ $<
ASPARAMS
和GPPPARAMS
有点不寻常。通常使用ASFLAGS
和CXXFLAGS
。另请参见make手册中的Variables Used by Implicit Rules和gnu编码标准中的Variables for Specifying Commands。可能是这样的:
CXX = g++
AS = as
LD = ld
CPPFLAGS = -Iinclude
CXXFLAGS = -m32 -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore -Wno-write-strings
ASFLAGS = --32
LDFLAGS = -melf_i386
objects = loader.o kernel.o
%.o: %.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -o s@ -c $<
%.o: %.s
$(AS) $(ASFLAGS) -o s@ $<
mykernel.bin: linker.ld $(objects)
$(LD) $(LDFLAGS) -T $< -o $@ $(objects)
install: mykernel.bin
sudo cp $< /boot/mykernel.bin
关于linux - g++:错误:无法识别的命令行选项“--32”;您是说“-m32”吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57238581/