我是C的新手。我有两个简单的源代码文件f1.c
和f2.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.c
和f2.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
那么问题是什么?谢谢!
答案 0 :(得分:0)
您应该查看C的编译过程。第一阶段是将.c
源代码编译为.o
个目标文件。 .c
个文件不需要查看其他.c
个文件;他们接受了你告诉他们外部功能存在的事实。直到链接器进入它才真正需要查看该函数,因为实现细节与您的.c
文件无关,只是您可能在标题中给出的接口。
如果您愿意,可以执行的操作是删除-o
标志,指定要创建的输出文件。只需编译
gcc -c f1.c f2.c
它会知道创建f1.o
和f2.o
,当你想要通过链接过程时,它将能够相互链接。
但是,我很好奇你想要在没有链接的情况下编译它们的意图。我只是问你把自己称为新手,所以我想知道你是否有一个最终目标,也许并没有提出正确的问题。