我是C语言的新手,我有两个简单的源代码文件f1.c
和f2.c
。
f1.c
看起来像:
#include <stdio.h>
#include "f.h"
void f1(void) {
// some code ...
}
f2.c
中的函数f2()
依赖于f1.c
中的f1()
。
#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
那么问题是什么?谢谢!
最佳答案
你应该看看 C 的编译过程。第一步是将 .c
源代码编译成 .o
目标文件。 .c
文件不需要查看其他.c
文件;他们接受你告诉他们的关于外部功能存在的事实。直到链接器进来,它才真正需要查看函数,因为实现细节对您的 .c
文件无关紧要,重要的是接口(interface),您可能已经在 header 中给出了它.
如果愿意,您可以删除指定要创建的输出文件的 -o
标志。只需编译
gcc -c f1.c f2.c
并且它会知道创建 f1.o
和 f2.o
,当您确实想要完成链接时,它们将能够相互链接过程。
不过,我很好奇您想要在不链接的情况下编译这些内容的意图可能是什么。我只是在您将自己称为新手时才问,所以我想知道您是否有一个最终目标,也许没有问正确的问题。
关于c - 为什么我得到 "clang: error: cannot specify -o when generating multiple output files"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46288760/