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