当我的系统缺少GTK头文件时,编译的c程序如何执行?

时间:2013-02-14 21:53:32

标签: c gtk

我正在尝试编译一个需要GTK头文件的简单ANSI C程序。

我知道在使用GCC编译时如何将源代码与gtk.h链接。

我的问题是考虑到GTK头文件丢失,为什么gedit(GTK lib)等应用程序在我的系统上运行?据推测,Gedit是在一个拥有GTK库的系统上编译的。但是为什么Gedit在执行期间不需要我的系统上的头文件?

作为编译程序的Java程序员,类文件总是必须与主可执行文件打包在一起。我还需要在目标系统上安装JVM。

感谢您的回复。

2 个答案:

答案 0 :(得分:5)

  

但为什么Gedit在我的系统中不需要头文件   执行?

仅在预处理阶段中需要头文件。一旦预处理器完成后,编译器就永远不会看到它们。显然,目标系统不需要它们来执行(同样的方式.c文件也不需要)。

你可能正在考虑图书馆,你是对的。确实:如果一个程序是动态链接的,并且目标环境没有必要的库,那么在正确的位置,使用正确的版本它将无法运行。确保它在大多数系统上运行的一种方法是静态链接东西,但这也会使你的可执行文件膨胀并使内存使用更少。

  

此外,我还需要在目标系统上安装JVM。

嗯,对于C,不需要这样的东西,因为一旦你编译它就会得到本机代码。本机代码与您从java获得的中间代码(字节代码)非常不同。没有必要像解释器这样的东西:你只需将二进制内容提供给CPU,它就可以做到。

答案 1 :(得分:4)

可执行文件所需的所有内容都是在编译后构建到可执行文件中的。在C中,头文件在引用时直接包含在源文件中,然后进行编译。