为什么我得到" clang:错误:生成多个输出文件时无法指定-o"?

时间:2017-09-18 21:56:12

标签: c gcc compiler-errors compilation

我是C的新手。我有两个简单的源代码文件f1.cf2.c

f1.c看起来像:

#include <stdio.h>
#include "f.h"

void f1(void) {
    // some code ...
}
f2()中的

功能f2.c依赖于f1()中的f1.c

#include <stdio.h>
#include "f.h"

void f2(void) {
    f1();
}

f1.cf2.c共享相同的标头f.h

void f1(void);
void f2(void);

没有main()访问权限,我只想将这两个文件编译成没有链接器的.o文件(使用-c选项),

gcc -c f1.c f2.c -o f2.o
然后我得到了,

clang: error: cannot specify -o when generating multiple output files

但是当我只提到f2.c时,效果很好,

gcc -c f2.c -o f2.o

那么问题是什么?谢谢!

1 个答案:

答案 0 :(得分:0)

您应该查看C的编译过程。第一阶段是将.c源代码编译为.o个目标文件。 .c个文件不需要查看其他.c个文件;他们接受了你告诉他们外部功能存在的事实。直到链接器进入它才真正需要查看该函数,因为实现细节与您的.c文件无关,只是您可能在标题中给出的接口。

如果您愿意,可以执行的操作是删除-o标志,指定要创建的输出文件。只需编译 gcc -c f1.c f2.c 它会知道创建f1.of2.o,当你想要通过链接过程时,它将能够相互链接。

但是,我很好奇你想要在没有链接的情况下编译它们的意图。我只是问你把自己称为新手,所以我想知道你是否有一个最终目标,也许并没有提出正确的问题。