ld:在 Makefile 中使用 -static-libstdc++ 时无法识别 -a 选项“tic-libstdc++”?

ld: unrecognized -a option `tic-libstdc++' when using -static-libstdc++ in Makefile?

我正在尝试将“fstream”库 link 添加到我的 C++ 内核中。 但是 linker 必须有 -static-libstdc++ 才能让它工作(和 G++)。但是当我去编译时,它说:

ld: unrecognized -a option `tic-libstdc++'

PS:我输入了整个内容 (-static-libstdc++)

有人知道为什么会这样吗? 这是我的 linker 命令:

ld -z max-page-size=0x1000 -Ttext=0x01000000 -static -Bsymbolic -static-libstdc++ -o $(TARGET) $(OBJS) build/GDT/GDTASM.o

-static-libstdc++ 是一个编译器选项,而不是 linker 选项。您已经将 linker 设置为 link 带有静态库的对象文件 (-static)。使用 -lstdc++:

ld -z max-page-size=0x1000 -Ttext=0x01000000 -static -Bsymbolic -o $(TARGET) $(OBJS) build/GDT/GDTASM.o -lstdc++

库必须列在目标文件之后。

最好不用ld:

g++ -static-libstdc++ -Wl,-z -Wl,max-page-size=0x1000 -Wl,-Ttext=0x01000000 -Wl,-Bsymbolic -o $(TARGET) $(OBJS) build/GDT/GDTASM.o