错误代码
这是我的错误代码,上面写着--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@ $<

ASPARAMSGPPPARAMS有点不寻常。通常使用ASFLAGSCXXFLAGS。另请参见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/

10-11 22:45
查看更多