【问题标题】:In C how do I compile and then create an executable file with a header and two c files?在 C 中,我如何编译然后创建一个带有头文件和两个 c 文件的可执行文件?
【发布时间】:2015-04-15 12:16:32
【问题描述】:

我一共有三个 C 文件。一个是头文件[.h],两个是源文件[.c]。

.h 文件名为encryption.h,对应的源文件为encryption.cencryption.c 有逻辑,但没有main() 功能。我的第二个 c 文件名为main.c。我有 main() 函数,它调用来自 encryption.c 的方法。

我正在 Mac OSx 上的终端中编译这些文件。我对如何编译它感到困惑,我尝试了以下方法:

gcc -c main.c
gcc -c encryption.c
gcc -c encryption.h
gcc main.o encryption.o encryption.g.gch -o encrypt

这似乎不起作用,它说我已经有一个预编译头文件。我尝试在网上找到答案,我知道它必须很简单,但我没有太多运气。这里有什么问题?

【问题讨论】:

  • gcc -c encryption.h----> 你不编译头文件。
  • 谢谢@SouravGhosh。解决这个问题的适当方法是什么?
  • 只是不编译头文件,不链接预编译的头文件,只链接源文件生成的目标文件。
  • 我不知道,显然用 gcc 编译的 .h 文件会发生什么......
  • 从我在网上查到的,它们是用于在某些方面优化性能的预编译头文件。 @JoachimPileborg

标签: c macos gcc compilation header


【解决方案1】:

不要编译头文件。头文件应包含到源文件中(使用#include 指令,在c 中)。只需编译源文件并将它们链接在一起。类似的东西

gcc -c main.c
gcc -c encryption.c
gcc main.o encryption.o -o encrypt

或者,简而言之,

gcc main.c encryption.c -o encrypt

注意:如果您在编译时担心存在(或不存在)头文件,请使用gcc -E 选项检查每个源文件的预处理输出。

【讨论】:

  • 那么头文件的意义何在?我对Java真的很熟悉,我看到头文件就像一个接口。如果它不打算使用,那么拥有它没有意义吗?我的意思是除非头文件中有常量,否则情况就不同了,但是我的教授想要该文件中我的函数的骨架代码。 . .
  • @MiguelJ。更新了答案。希望有帮助。 :-)
  • 头文件的重点是,基本上,#includes 的每个代码文件都知道在那里声明的函数是如何工作的。还知道#defines 和类型...
  • @pmg 谢谢你的补充先生。 :-)
猜你喜欢
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多