程序没有运行。如何修复它(我使用C-Free 4.0) ? g++.exe :无法使用 -c 或 -S 指定 -o 以及多次编译
您可以包含您正在使用的整个构建命令吗? 我的猜测是,您正在尝试在单个命令中将多个文件编译为可执行文件(例如
g++ file1.cc file2.cc file3.cc -o file.exe
),但您在编译命令中也有一个 -c
标志。
供参考,通常编译时会发生两件事。 首先,源代码变成机器代码。 其次,机器代码被链接以生成可执行文件。
在 gcc/g++ 中,您可以使用
-c
标志将一个源文件编译为机器代码。 您可以使用 -o
标志将一个(或多个)机器代码文件链接到可执行文件中。 有一种简写方式,您可以使用 -o
标志一次性编译和链接所有内容(但这通常不是一个好主意,因为对任何文件的任何更改都需要您重新编译 所有内容)。
至于
-S
,那是当你想从源代码生成汇编代码时。 不过,我猜这不是你正在做的事情。
这里有一个例子,只是为了完善它。 假设你有文件
file1.cc
和file2.cc
,并且main()
中有一个file1.cc
函数。 然后你可以像这样创建机器代码:
g++ file1.cc -c
g++ file2.cc -c
这将导致出现两个新文件,file1.o 和 file2.o。
接下来,您可以像这样链接它们:
g++ file1.o file2.o -o file.exe
这将生成
file.exe
,您可以运行的最终可执行文件。
同样的问题。尝试构建legacybios。
旧版 GCC 告诉:“不能使用 -c 或 -S 指定 -o 以及多次编译”。
新的 GCC 告诉:“无法识别的命令行选项‘-combine’”。
某种恶性循环!
这是legacybios的Makefile产生的命令:
GCC -Wall -Os -MD -m32 -DMODE16 -march=i386 -mregparm=2 -ffreestand -fno-jump-tables -fwhole-program -S -combine -c src/floppy.c src/disk.c src/system.c src/clock.c src/serial.c src/kbd.c src/output.c src/boot.c -o out/blob.16.s