我正在尝试编译一个需要 GTK 头文件的简单 ANSI C 程序。
我知道在使用 GCC 编译时如何将源代码与 gtk.h 链接。
我的问题是考虑到 GTK 头文件丢失,我的系统上如何运行诸如 gedit (GTK lib) 之类的应用程序?据推测,Gedit 是在具有 GTK 库的系统上编译的。但是为什么 Gedit 在执行过程中不需要我系统上的头文件呢?
作为编译程序的 Java 程序员,类文件总是必须与主可执行文件一起打包。我还需要在目标系统上安装 JVM。
感谢您的有用回复。
但是为什么 Gedit 在执行过程中不需要我系统上的头文件呢?
只有在预处理阶段才需要头文件。一旦预处理器完成了它们,编译器甚至不会看到它们。显然,目标系统也不需要它们来执行(同样不需要 .c 文件)。
您可能正在考虑图书馆,您是对的。确实:如果一个程序是动态链接的,而目标环境没有必要的库,在正确的地方,正确的版本,它就不会运行。确保它可以在大多数系统上运行的一种方法是静态链接内容,但这也会使您的可执行文件膨胀并减少对内存的使用。
我还需要在目标系统上安装 JVM。
好吧,对于 C 来说,不需要这样的东西,因为一旦你编译它,你就会得到本机代码。本机代码与您从 java 获得的中间内容(字节码)非常不同。不需要像解释器这样的东西:你只需将二进制文件提供给 CPU,它就会完成它的工作。
可执行文件需要的头文件中的所有内容在编译时都内置到可执行文件中。在 C 中,头文件只是在引用然后编译时直接包含在源文件中。