一 Windows下的头文件,库文件
1.怎样通过h文件调用对应的dll文件
这就时导入库lib的作用:告诉链接器调用的函数在哪个dll中,函数执行代码在dll中的什么位置。
2.两种lib库:静态库与导入库
.lib后缀的库有两种,一种为静态链接库(Static Library),另一种为动态链接库的导入库(Import Library)
(1)静态库
静态库是一个或多个obj文件的打包,静态库本身包含实际执行代码、符号表等。
(2)导入库
动态库一般会有对应的导入库,方便程序静态载入动态链接库。导入库只包含地址符号表等,确保程序找到对应函数的一些基本地址信息。其实际执行代码位于动态库中。
3.静态库和动态库的区别
(1)动态库有lib文件和dll文件,lib文件一般是一些索引信息,包含dll导出的函数的名称和位置,具体的实现在dll文件中,应用程序使用lib文件链接到所需要的dll文件,库中的函数和数据并不复制到可执行文件。lib文件必须在编译期就链接到应用程序中,而dll文件是运行期才会被调用。
动态链接把函数所在文件模块(dll)和调用函数在文件中的位置等信息链接进目标程序。运行时再从dll中寻找相应函数代码。
(2)静态库只有lib文件,索引和实现都在其中 。
静态库会把文件中用到的函数代码直接复制到目标程序中,程序运行时不再需要库文件。
二 Linux下的头文件和库文件
头文件一般是声明和定义,库文件是已经编译好的二进制代码。动态库为.so,静态库为.a。
1.常出现的错误
(1)undefined reference to 'xxx'
(2)/usr/bin/ld : cannot find -lxxx
这两个问题是找不到库文件的问题。
(3)xxx.h: No such file or directory
该问题是找不到头文件的问题。
2.头文件相关
(1)头文件的作用
头文件是应用程序和函数库之间的桥梁和纽带。
头文件的主要作用在于多个代码文件全局变量或函数的重用、防止重定义的冲突,对各个被调用函数给出一个描述,用户程序只需要按照头文件中的接口声明来调用相关函数或变量,链接器会从库中寻找相应的实际定义代码。
(2) -I参数指定头文件目录。
3.库文件相关
(1)头文件只有函数声明,函数的实现在哪?在函数库中,链接时要指令程序链接的库。
(2)-L 指定库文件所在目录
(3)-ltest 指定库文件libtest,其它类似