小妹问个很弱的问题啊

时间:2022-02-02 04:32:29
各位大侠 ,请问库函数与头文件是怎么区别啊?我看头文件里面就是一些变量定义什么的,没有函数实现啊? 库函数是二进制文件的吗,我们可以看库函数的源代码吗? 还有就是链接 过程是用来干什么的?

7 个解决方案

#1


库函数的发布一般都是二进制文件形式的
大多数都没法看它的实现  因为有些涉及商业机密

实现库函数的时候
最后往往会终结于系统调用
除非你有这个操作系统的实现源代码
否则还是不知道具体的实现
有兴趣的可以研究一下Linux的内核源码

#2


通常使用得话,没多少必要看实现得源代码,一般接口在头文件里都提供了。

#3


库可以是dll,也可以是静态Lib,但头文件一般都需要的

#4


呵呵,小妹妹呀,其实打个比方吧:C语言源程序就想当于一部宝马车的设计图纸;编译器编译完源程序后生成了目标文件,一个个的目标文件就相当于用宝马车的设计图纸制造出的一个个零件;而链接器就是装配车间,她把一个个的目标文件装配成一个可执行文件,这就是链接器的作用了。
C语言的标准库就是一个标准接口,任何遵守C语言标准的编译器都遵守这个接口,这对保证C语言的可移植性是很重要的。

#5


库函数与头文件有什么区别吗?

库可以是dll,也可以是静态Lib,但头文件一般都需要的

-------------
and ...?

#6


头文件里就是声明,头文件不参与编译,只参与预处理,自然头文件中的内容不会被执行,预处理器对源文件中用到的函数、变量进行查看,如果预处理看到源文件用调用了一个函数、或操作一个变量了,而这个函数或变量还没有定义,那么预处理器就去头文件中去找它们的声明,这些声明一般说明函数或变量在别的模块中已经定义了,请编译器放心使用,这些调用函数或变量的地方在编译时并不急着用函数的入口地址或变量的地址来取代函数名或变量名,而是作一个标记,表明这个地方要到链接时处理,于是,到链接时,链接器就从其它目标文件中取出这些函数的入口地址或变量地址,并把这些地址填入到在其它目标文件中调用了它们的地方。

dll(动态链接库)的处理是这样的,它的.h文件也是说明有这个函数在别的地方已经定义了,但是动态库的.lib文件与静态库的.lib文件是完全不同的,静态库的.lib文件只是有的开发工具用这个扩展名,其实它们是开发商预先编译了的目标文件,也就是二进制文件;而动态库的.lib文件名为“导入库文件”,它也是个说明文件,说明要调用的dll中的函数在哪个动态库中、以及在动态库中的什么地方,它就在链接时把这些信息加入调用动态链接库函数的地方,到执行时,程序就能根据这些信息找到相应的dll中的函数,如果这个dll没有调入内存,操作系统就会把它调入内存,这样程序就完成了调用dll中函数的过程。

#7


谢谢 楼上几位!!


就是说  头文件里面放的都是 一些函数生明 或 变量声明 什么的吧 ,而这些声明的函数 都已经在 库文件中编译好了,成了二进制文件,对吧? 调用的时候根据声明 去搜索库文件去执行? 静态库 在链接的时候

#1


库函数的发布一般都是二进制文件形式的
大多数都没法看它的实现  因为有些涉及商业机密

实现库函数的时候
最后往往会终结于系统调用
除非你有这个操作系统的实现源代码
否则还是不知道具体的实现
有兴趣的可以研究一下Linux的内核源码

#2


通常使用得话,没多少必要看实现得源代码,一般接口在头文件里都提供了。

#3


库可以是dll,也可以是静态Lib,但头文件一般都需要的

#4


呵呵,小妹妹呀,其实打个比方吧:C语言源程序就想当于一部宝马车的设计图纸;编译器编译完源程序后生成了目标文件,一个个的目标文件就相当于用宝马车的设计图纸制造出的一个个零件;而链接器就是装配车间,她把一个个的目标文件装配成一个可执行文件,这就是链接器的作用了。
C语言的标准库就是一个标准接口,任何遵守C语言标准的编译器都遵守这个接口,这对保证C语言的可移植性是很重要的。

#5


库函数与头文件有什么区别吗?

库可以是dll,也可以是静态Lib,但头文件一般都需要的

-------------
and ...?

#6


头文件里就是声明,头文件不参与编译,只参与预处理,自然头文件中的内容不会被执行,预处理器对源文件中用到的函数、变量进行查看,如果预处理看到源文件用调用了一个函数、或操作一个变量了,而这个函数或变量还没有定义,那么预处理器就去头文件中去找它们的声明,这些声明一般说明函数或变量在别的模块中已经定义了,请编译器放心使用,这些调用函数或变量的地方在编译时并不急着用函数的入口地址或变量的地址来取代函数名或变量名,而是作一个标记,表明这个地方要到链接时处理,于是,到链接时,链接器就从其它目标文件中取出这些函数的入口地址或变量地址,并把这些地址填入到在其它目标文件中调用了它们的地方。

dll(动态链接库)的处理是这样的,它的.h文件也是说明有这个函数在别的地方已经定义了,但是动态库的.lib文件与静态库的.lib文件是完全不同的,静态库的.lib文件只是有的开发工具用这个扩展名,其实它们是开发商预先编译了的目标文件,也就是二进制文件;而动态库的.lib文件名为“导入库文件”,它也是个说明文件,说明要调用的dll中的函数在哪个动态库中、以及在动态库中的什么地方,它就在链接时把这些信息加入调用动态链接库函数的地方,到执行时,程序就能根据这些信息找到相应的dll中的函数,如果这个dll没有调入内存,操作系统就会把它调入内存,这样程序就完成了调用dll中函数的过程。

#7


谢谢 楼上几位!!


就是说  头文件里面放的都是 一些函数生明 或 变量声明 什么的吧 ,而这些声明的函数 都已经在 库文件中编译好了,成了二进制文件,对吧? 调用的时候根据声明 去搜索库文件去执行? 静态库 在链接的时候