着要看你从哪一个层次来提问.
1.编码方式不同。
一般文件采用通常的UTF8编码格式,这种编码编码是国际标准,所以在不同的系统上都能看到我们想要的字符。库文件的编码格式由系统提供,不同的系统的库文件编码格式不同。LINUX下的动态库文件是.so,静态库是.a,WINDOWS动态库是.dll,他们内部的二进制排列顺序不同。
2.文件头标志不同,例如图片文件.png格式的文件开头的16进制标志是:8950 4e47 0d0a 1a0a ,其他文件也有自己的文件头标识。他们不同的编码方式需要采用不同的算法来解压数据。
另外,如果你只是在问C/C++编译时的文件和库文件的区别,请看下面:
普通的文件例如stdio.h只是最普通的文本文件(只要普通的文本文件就能查看),编译器在编译一个单元时,编译器要求链接器根据所包含的头文件去链接库文件,使得头文件内部的函数定义,(和其他各种定义)找到对应的位置。这样就形成了可以运行的二进制文件。库文件是编译器之前就编译好的程序(他是库,包含了函数定义,类型定义,以及一些最通用的变量,例如C++的std::cout对象),这样避免每次编译都要从头编译这些相同的函数,同时减小了最终程序的文件大小,动态库是作为多个程序共享的,这可以避免每个程序都含有某个重复的部分。
你的问题提的有点模糊,所以先回答你的这些吧
简单理解头文件就是让你的代码知道哪些东西是存在的,你是可以使用的。所以使用任何自定义、系统的函数、类等,都必须先包含头文件,否则编译器就告诉你***不存在。就是这个意思。
库的含义就是在头文件中声明的那些内容对应的实现是怎么样的。这些内容对客户是不需要可见的,只是在程序编译的时候,链接到客户的代码中即可,在运行的时候会加载到客户的进程中。
换句话说,库里边的内容是程序执行的关键。