c - 为什么我得到 "clang: error: cannot specify -o when generating multiple output files"?

标签 c gcc compiler-errors compilation

我是C语言的新手,我有两个简单的源代码文件f1.cf2.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.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

那么问题是什么?谢谢!

最佳答案

你应该看看 C 的编译过程。第一步是将 .c 源代码编译成 .o 目标文件。 .c 文件不需要查看其他.c 文件;他们接受你告诉他们的关于外部功能存在的事实。直到链接器进来,它才真正需要查看函数,因为实现细节对您的 .c 文件无关紧要,重要的是接口(interface),您可能已经在 header 中给出了它.

如果愿意,您可以删除指定要创建的输出文件的 -o 标志。只需编译 gcc -c f1.c f2.c 并且它会知道创建 f1.of2.o ,当您确实想要完成链接时,它们将能够相互链接过程。

不过,我很好奇您想要在不链接的情况下编译这些内容的意图可能是什么。我只是在您将自己称为新手时才问,所以我想知道您是否有一个最终目标,也许没有问正确的问题。

关于c - 为什么我得到 "clang: error: cannot specify -o when generating multiple output files"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46288760/

相关文章:

c - 模仿/模仿 C 中的大端行为?

error-handling - 如何打印错误?

java - 考试成绩和Java成绩

c - 为什么信号量不受来自不同线程的帖子的影响?

c++ - 写入 [ds :0x0]? 后添加 ud2 有什么意义

gcc - 使用链接描述文件显式设置起始堆栈指针

haskell - 在Haskell中使用守护程序时出错

c - C语言中的指针

c - 这个程序的输出是什么

计算 h 指数